更多嵌套Python嵌套字典

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)


Mik*_*ham 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'})
Run Code Online (Sandbox Code Playgroud)

取决于你真正需要的是什么.