0

在 Python 中对大型字典中的字典求和的最有效方法是什么?

我正在寻找类似的帖子,但不完全是我想要的。例如,列表中有一个 dict 的帖子:Python: Elegantly merge dictionaries with sum() of values。还有其他东西,但不完全适用于字典中的字典。

示例代码是:

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}

请帮忙!非常感谢!

4

2 回答 2

4

使用collections.Counter

>>> 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.Counterwith sum(类似于您提供的链接中的答案):

>>> a = ...
>>> sum(map(collections.Counter, a.values()), collections.Counter())
Counter({'m': 5, 'o': 4, 'n': 3})
于 2013-09-02T11:36:00.467 回答
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})
于 2013-09-02T11:36:08.180 回答