Суммировать соответствующие элементы из нескольких словарей python

У меня есть произвольное количество словарей python равной длины с соответствующими наборами ключей, например:

{'a':1, 'b':4, 'c':8, 'd':9} {'a':2, 'b':3, 'c':2, 'd':7} {'a':0, 'b':1, 'c':3, 'd':4} ... 

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

 {'a':3, 'b':8, 'c':13, 'd':20} 

Может быть, есть уродливая, сложная структура цикла, но есть ли более хороший способ сделать это с помощью какой-то умности понимания списка / диктата? Подумайте об этом, я действительно не уверен, как сделать уродливую версию цикла.

  • Python - механизм для идентификации сжатого типа файла и распаковки
  • в Numpy, как закрепить два двухмерных массива?
  • Python zip () эквивалент в C или C ++
  • Разделители пути Python ZipFile
  • Как вы разархивируете очень большие файлы в python?
  • Прочитайте большой текстовый файл в молнии в строке в python
  • почему python не может распаковать защищенный паролем zip-файл, созданный winrar, используя zip-метод?
  • Майя Python Создает и использует Zipped Package?
  • 2 Solutions collect form web for “Суммировать соответствующие элементы из нескольких словарей python”

    collections.Counter() на помощь 😉

     from collections import Counter dicts = [{'a':1, 'b':4, 'c':8, 'd':9}, {'a':2, 'b':3, 'c':2, 'd':7}, {'a':0, 'b':1, 'c':3, 'd':4}] c = Counter() for d in dicts: c.update(d) 

    Затем:

     >>> print c Counter({'d': 20, 'c': 13, 'b': 8, 'a': 3}) 

    Или вы можете изменить его на dict:

     >>> print dict(c) {'a': 3, 'c': 13, 'b': 8, 'd': 20} 

    Для Counter() не имеет значения, имеют ли все входные dicts одинаковые ключи. Если вы точно знаете, что они делают, вы можете попробовать смешно 😉 однострочные:

     d = {k: v for k in dicts[0] for v in [sum(d[k] for d in dicts)]} 

    Counter() более четкий, быстрый и гибкий. Справедливости ради, однако, этот чуть менее смешной однострочный шрифт менее смехотворен:

     d = {k: sum(d[k] for d in dicts) for k in dicts[0]} 

    Если вы просто хотите использовать только dict , вы можете использовать это

     dicts = [{'a':0, 'b':4, 'c':8, 'd':9}, {'a':0, 'b':3, 'c':2, 'd':7}, {'a':0, 'b':1, 'c':3, 'd':4}] result = {} for myDict in dicts: for key, value in myDict.items(): result.setdefault(key, 0) result[key] += value print result 

    Вывод:

     {'a': 0, 'c': 13, 'b': 8, 'd': 20} 
    Python - лучший язык программирования в мире.