суммирование элементов в вложенном словаре с разными ключами

У меня есть вложенный словарь по строкам:

{'apple': {'a': 1, 'b': 4, 'c': 2}, 'orange': {'a': 4, 'c': 5}, 'pear': {'a': 1, 'b': 2}} 

То, что я хочу сделать, это избавиться от внешних ключей и суммировать значения внутренних ключей, чтобы у меня появился новый словарь, который выглядит так:

 {'a': 6, 'b': 6, 'c': 7} 

4 Solutions collect form web for “суммирование элементов в вложенном словаре с разными ключами”

Вы можете использовать класс Counter :

 >>> from collections import Counter >>> d = {'apple': {'a': 1, 'b': 4, 'c': 2}, 'orange': {'a': 4, 'c': 5}, 'pear': {'a': 1, 'b': 2}} >>> sum(map(Counter, d.values()), Counter()) Counter({'c': 7, 'a': 6, 'b': 6}) 
 from collections import defaultdict d = defaultdict(int) for dct in yourdict.values(): for k,v in dct.items(): d[k] += v 

Главное преимущество этого ответа в том, что он работает с python2.5. Для python2.7 + см. Решения, отправленные @DSM и @BigYellowCactus.

Вот еще несколько collections.Counter Решение для решения, это не однострочный, как другие, но я думаю, что он чище:

 from collections import Counter d = {'apple': {'a': 1, 'b': 4, 'c': 2}, 'orange': {'a': 4, 'c': 5}, 'pear': {'a': 1, 'b': 2}} counts = Counter() for v in d.values(): counts.update(v) 

Объект Counter предназначен для упрощения таких вещей:

 >>> from collections import Counter >>> d = {'apple': {'a': 1, 'b': 4, 'c': 2}, 'orange': {'a': 4, 'c': 5}, 'pear': {'a': 1, 'b': 2}} >>> sum((Counter(v) for v in d.itervalues()), Counter()) Counter({'c': 7, 'a': 6, 'b': 6}) 
Python - лучший язык программирования в мире.