更多嵌套的Python嵌套字典

3
阅读完如何最佳实现Python嵌套字典后,为什么下面的方式是错误的:
c = collections.defaultdict(collections.defaultdict(int))

在Python中?我认为这样可以产生以下结果
{key:{key:1}}

还是我想错了吗?
2个回答

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

5
伊莱·本德斯基为这个问题提供了一个很好的直接回答。重新构造数据可能会更好。
>>> import collections
>>> c = collections.defaultdict(int)
>>> c[1, 2] = 'foo'
>>> c[5, 6] = 'bar'
>>> c
defaultdict(<type 'int'>, {(1, 2): 'foo', (5, 6): 'bar'})

根据您实际所需。


1
这是一个质量观察。 - Matt Joiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接