Summe entsprechende Elemente von mehreren Python-Wörterbüchern

Ich habe eine beliebige Anzahl von gleich langen Python-Wörterbüchern mit passenden Sätzen von Schlüsseln, wie folgt:

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

Wie kann ich ein einziges Wörterbuch mit demselben Satz von Schlüsseln erhalten, aber mit Werten wie die Summen der entsprechenden Elemente im Wörterbuchsatz? Mit anderen Worten, ich möchte:

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

Vielleicht gibt es eine hässliche, komplizierte Loop-Struktur, aber gibt es einen schöneren Weg, dies zu tun mit einer Art von List / dict Verständnis cleverness? Kommen Sie, um darüber nachzudenken, ich bin wirklich nicht sicher, wie man eine hässliche Loop-Version machen sowieso ..

  • Was passiert mit diesem matplotlib.finance.candlestick2_ochl code?
  • Gruppe nach Jahr, Monat, Tag in einer sqlalchemy
  • Modul als Strings auflisten und importieren
  • Verwenden von PIL zum Einfügen von Graustufenbild in RGB-Bild durch Einfügen von Graustufenwerten in RGB-Tupel
  • Integrieren von Befehlszeilen-erzeugten python .coverage-Dateien mit PyDev
  • Tkinter: Wie kann ich eine Taskleiste erstellen?
  • 2 Solutions collect form web for “Summe entsprechende Elemente von mehreren Python-Wörterbüchern”

    collections.Counter() zur Rettung 😉

     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) 

    Dann:

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

    Oder du kannst es wieder in einen Dict wechseln:

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

    Es spielt keine Rolle für Counter() ob alle Eingabedaten dieselben Schlüssel haben. Wenn Sie sicher wissen, dass sie das tun, könnten Sie lächerlich ausprobieren 😉 Einzeiler wie folgt:

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

    Counter() ist klarer, schneller und flexibler. Um fair zu sein, aber dieser etwas weniger lächerliche Einzeiler ist weniger lächerlich:

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

    Wenn du einfach nur dict willst, kannst du das benutzen

     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 

    Ausgabe:

     {'a': 0, 'c': 13, 'b': 8, 'd': 20} 
    Python ist die beste Programmiersprache der Welt.