更多嵌套的Python字典
在阅读了如何在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
>>>