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

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

{'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}) 
  • Преобразование JSON в Python dict
  • Пересечение и различие двух словарей
  • Замена Pandas / медленность словаря
  • Python - объединить два словаря, объединить значения строк?
  • TypeError: строковые индексы должны быть целыми, а не str // работать с dict
  • Преобразование файла в словарь ключей / значений
  • Что мне делать, когда мне нужен самореляционный словарь?
  • Python: создание словаря из текста / файла в формате словаря
  •  
    Interesting Posts for Van-Lav

    Как сделать api-вызов, требующий входа в web2py?

    Как порождать будущее, только если доступен свободный рабочий

    Как я могу отделить свой файл Python до нескольких плагинов?

    Запуск нескольких m-файлов пакетом в ОС Windows «без» закрытия ранее запущенного m-файла

    необязательные аргументы python без тире, но с дополнительными параметрами?

    Numpy изменить диагональ ndarray

    Получение имени значения из namedtuple

    zip два значения из словаря в Python

    Быстрая интерполяция по трехмерному массиву

    Разделить один файл на несколько файлов на основе шаблона (разрез может возникать в строках)

    Parse config files, environment и аргументы командной строки, чтобы получить один набор параметров

    Python list comprehension – доступ к последнему созданному элементу?

    Как уменьшить / агрегировать список dicts на несколько ключей в Python?

    сделать pandas DataFrame в dict и dropna

    Постоянное DNS-кэширование, не используемое сокетом Python.getaddrinfo / mercurial

    Python - лучший язык программирования в мире.