对于第一个代码片段,你是正确的。至于y
,它会在键不存在于y
时创建一个默认值为0的defaultdict,因此你可以将其视为嵌套字典。考虑以下示例:
y = defaultdict(lambda: defaultdict(lambda: 0))
print y['k1']['k2']
print dict(y['k1'])
如果不使用defaultdict创建等效的嵌套字典结构,则需要为y ['k1']
创建一个内部字典,然后将y ['k1'] ['k2']
设置为0,但是当defaultdict遇到它没有见过的键时,它在幕后完成所有这些操作:
y = {}
y['k1'] = {}
y['k1']['k2'] = 0
下面的函数可能有助于在解释器上玩耍以更好地理解它:
def to_dict(d):
if isinstance(d, defaultdict):
return dict((k, to_dict(v)) for k, v in d.items())
return d
这将返回嵌套的defaultdict的字典等效形式,更容易阅读,例如:
>>> y = defaultdict(lambda: defaultdict(lambda: 0))
>>> y['a']['b'] = 5
>>> y
defaultdict(<function <lambda> at 0xb7ea93e4>, {'a': defaultdict(<function <lambda> at 0xb7ea9374>, {'b': 5})})
>>> to_dict(y)
{'a': {'b': 5}}
y = defaultdict(partial(defaultdict, int))
。 - Lauritz V. Thaulowdefaultdict(int)
和lambda: 0
的工作方式相同?换句话说,为什么defaultdict(int)
总是返回0作为值? - briandkint()
会返回零。 - Fred Foo