Clu*_*tch 3 python collections nested
阅读后实现嵌套字典的最佳方法是什么?为什么这样做有误:
c = collections.defaultdict(collections.defaultdict(int))
Run Code Online (Sandbox Code Playgroud)
在python?我认为这可以产生
{key:{key:1}}
Run Code Online (Sandbox Code Playgroud)
或者我在想错了?
Eli*_*sky 14
defaultdict期望可调用的构造函数.defaultdict(int)是一个默认的字典对象,而不是可调用的.lambda然而,使用它可以工作:
c = collections.defaultdict(lambda: collections.defaultdict(int))
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为我传递给外部的defaultdict是一个可调用的,在调用时创建一个新的defaultdict.
这是一个例子:
>>> import collections
>>> c = collections.defaultdict(lambda: collections.defaultdict(int))
>>> c[5][6] += 1
>>> c[5][6]
1
>>> c[0][0]
0
>>>
Run Code Online (Sandbox Code Playgroud)
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'})
Run Code Online (Sandbox Code Playgroud)
取决于你真正需要的是什么.