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

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

{'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}) 
  • Почему у меня нет атрибута «__getitem__» для словаря?
  • Получение разницы (дельта) между двумя списками словарей
  • Элегантный способ удаления полей из вложенных словарей
  • Сколько элементов в словаре имеет одинаковое значение в Python
  • Вложенный словарь с двойными ключами, но с разными значениями
  • Разработка определенных значений из вложенного словаря
  • Как перегруппировать ключи python dict
  • Как печатать несортированный словарь в python?
  • top n ключей с наивысшими значениями в словаре с кортежами как ключи
  • Python Json загружает () возвращающую строку вместо словаря?
  • Каков самый быстрый кортеж производительности для больших наборов данных в python?
  • Python - лучший язык программирования в мире.