更多嵌套的Python字典

3 投票
2 回答
2280 浏览
提问于 2025-04-15 20:48

在阅读了如何在Python中实现嵌套字典的最佳方法?后,为什么这样做是不对的呢:

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

在Python中?我本以为这样可以产生

{key:{key:1}}

或者我想错了吗?

2 个回答

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

这要根据你实际需要的内容来决定。

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
>>> 

撰写回答