为何要引入
使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:
>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默认值
'N/A'
除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。
应用
怎样实现一个键对应多个值的字典(也叫 multidict)
怎么做?
- 将这多个值放到另外的容器中,比如列表或者集合里面
- 选择使用列表还是集合取决于你的实际需求。
- 如果你想保持元素的插入顺序就应该使用列表
- 如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)。
你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值,所以你只需要关注添加元素操作了。比如:
from collections import defaultdict
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4) d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)