这就是defaultdict的工作原理:
from collections import defaultdict
a=defaultdict(lambda:3)
a[200]==3 #True
为什么defaultdict
被设计为采用没有参数的函数,而不仅仅是一个常量值?
这是替代定义。
class dd(dict):
def __init__(self,x):
self._default=x
def __getitem__(self,key):
if key in self: return dict.__getitem__(self, key)
else:
self[key]=self._default
return self[key]
那样
a=dd(3)
a[200]==3 #True
答案 0 :(得分:10)
因为如果您希望默认值是一个可变对象,您可能希望它是每个键的不同可变对象。
如果你传递了一个常量并且defaultdict([])
,那么每次访问一个丢失的键时,它的值将被设置为相同的列表。然后你会得到这个:
>>> d = defaultdict([])
>>> d[1].append("Whoops")
>>> print d[2]
["Whoops"]
具有可变的默认值实际上非常常见且有用,因为它允许您执行d[key].append("Blah")
之类的操作,而无需先检查d[key]
是否存在。对于这种情况,您需要某种方式每次都返回一个新值,最简单的方法是使用一个返回默认值的callable。