默认值问题的由来
在Python中访问字典中不存在的键,会引发KeyError异常。有时候,字典中的每个键都存在默认值是非常方便的,例如下面的例子:
上述代码实现统计人员组成(manning)的各角色人数,并存储至counts字典中。运行上述代码,因为Python的dict中无默认值,访问字典中不存在的键,则会抛出KeyError异常,如下:
之前是这么解决这个问题的
既然访问字典中不存在的键,会抛出KeyError异常。那么就在每次访问时先判断键是否存在,如果不存在则默认赋值1。如下:
其实也可以这样实现
有没有更优雅的方式?
当然有啦,defaultdict 主要用来需要对 value 做初始化的场景,属于内建函数dict的子类,调用工厂函数提供缺失的值。
使用 defaultdict初始化字典值为list
defaultdict还可以接受任何不带参数且有返回的函数作为参数,函数的返回结果作为默认值,使得默认值的设置更加灵活。如下:
题外——实现元素个数统计,有没有更优雅的方式?
当然有啦,collections.Counter是一个简单的计数器。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。