在Python中的大字典中对词典进行求和的最有效方法是什么?
我发现了类似的帖子,但不完全是我想要的。例如,列表中有一个dict帖子:Python: Elegantly merge dictionaries with sum() of values。还有其他的东西,但不完全是dict中的dict。
示例代码为:
a={}
a["hello"]={'n': 1,'m': 2,'o': 3}
a["bye"]={'n': 2,'m': 1,'o': 0}
a["goodbye"]={'n': 0,'m': 2,'o': 1}
我需要的输出是:
{'n': 3,'m': 5,'o': 4}
请帮忙!非常感谢!
答案 0 :(得分:4)
>>> a = {}
>>> a["hello"]={'n': 1,'m': 2,'o': 3}
>>> a["bye"]={'n': 2,'m': 1,'o': 0}
>>> a["goodbye"]={'n': 0,'m': 2,'o': 1}
>>> import collections
>>> result = collections.Counter()
>>> for d in a.values():
... result += collections.Counter(d)
...
>>> result
Counter({'m': 5, 'o': 4, 'n': 3})
>>> dict(result)
{'m': 5, 'o': 4, 'n': 3}
将collections.Counter
与sum
一起使用(类似于您提供的链接中的答案):
>>> a = ...
>>> sum(map(collections.Counter, a.values()), collections.Counter())
Counter({'m': 5, 'o': 4, 'n': 3})
答案 1 :(得分:0)
您可以使用collections.defaultdict
:
>>> a = {'bye': {'m': 1, 'o': 0, 'n': 2}, 'hello': {'m': 2, 'o': 3, 'n': 1}, 'goodbye': {'m': 2, 'o': 1, 'n': 0}}
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for v in a.values():
... for x, y in v.iteritems():
... d[x] += y
...
>>> print d
defaultdict(<type 'int'>, {'m': 5, 'o': 4, 'n': 3})