Python中有多个’collection.defaultdict’级别

问题:

感谢SO上的一些好人,我发现了collections.defaultdict提供的可能性,特别是可读性和速度。我已经把它们用成功了。
现在我想实现三个级别的字典,两个顶级的字典是defaultdict,最低的是int。我没有找到适当的方法来做到这一点。这是我的尝试:

from collections import defaultdict
d = defaultdict(defaultdict)
a = [("key1", {"a1":22, "a2":33}),
     ("key2", {"a1":32, "a2":55}),
     ("key3", {"a1":43, "a2":44})]
for i in a:
    d[i[0]] = i[1]

现在这是有效的,但以下是所期望的行为,并不是:

d["key4"]["a1"] + 1

我怀疑我应该宣布第二级defaultdict类型为int的地方,但我没有找到在哪里或如何这样做。
我首先使用defaultdict的原因是避免为每个新密钥初始化字典。
任何更优雅的建议?
感谢pythoneers!

回答:

使用:

d = defaultdict(lambda: defaultdict(int))

每当在d中访问新密钥时,这将创建一个新的defaultdict(int)

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Multiple levels of ‘collection.defaultdict’ in Python

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 56 = 58