所defaultdict
需要的只是一个可调用对象,该对象将返回不带参数调用时应用作默认值的对象。
如果要调用int
构造函数,它将返回0
,如果要调用lambda: 0
,它将返回0
。与列表相同。唯一的区别是,构造函数将始终使用其逻辑来创建对象。一个lambda,如果您选择这样做,则可以添加其他逻辑。
例如,
# alternating between `0` and `[]`
from itertools import count
factory = lambda c=count(): 0 if next(c) % 2 else []
superdict = defaultdict(factory)