更多嵌套Python嵌套字典

时间:2010-03-24 17:48:11

标签: python collections nested

阅读What is the best way to implement nested dictionaries?后,为什么这样做是错误的:

c = collections.defaultdict(collections.defaultdict(int))

在python中?我认为这会产生

{key:{key:1}}
或者我在想错了吗?

2 个答案:

答案 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'})

取决于您的实际需要。