阅读What is the best way to implement nested dictionaries?后,为什么这样做是错误的:
c = collections.defaultdict(collections.defaultdict(int))
在python中?我认为这会产生
{key:{key:1}}
或者我在想错了吗?
答案 0 :(得分:14)
defaultdict
的构造函数需要一个可调用的。 defaultdict(int)
是默认的字典对象,而不是可调用的。然而,使用lambda
它可以工作:
c = collections.defaultdict(lambda: collections.defaultdict(int))
这是有效的,因为我传递给外部defaultdict
的是一个可调用的,在调用时会创建一个新的defaultdict
。
以下是一个例子:
>>> import collections
>>> c = collections.defaultdict(lambda: collections.defaultdict(int))
>>> c[5][6] += 1
>>> c[5][6]
1
>>> c[0][0]
0
>>>
答案 1 :(得分:5)
Eli Bendersky为这个问题提供了一个很好的直接答案。将数据重组为
也可能更好>>> import collections
>>> c = collections.defaultdict(int)
>>> c[1, 2] = 'foo'
>>> c[5, 6] = 'bar'
>>> c
defaultdict(<type 'int'>, {(1, 2): 'foo', (5, 6): 'bar'})
取决于您的实际需要。