在一本大词典中总结词典

时间:2013-09-02 11:32:56

标签: python dictionary

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

请帮忙!非常感谢!

2 个答案:

答案 0 :(得分: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.Countersum一起使用(类似于您提供的链接中的答案):

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