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 ..

  • Kann IE nicht in Selenium WebDriver Python aufrufen
  • Erstellen Sie einen String mit Backslashs für die Verwendung von sed
  • Öffnen Sie ein Textdatei-Fenster mit Python
  • Pandas: Parse fusionierte Kopfspalten aus Excel
  • Aus Speicherfehler in opencv3.0, der im Docker-Container läuft
  • Erstellen von .exe-Datei mit cx_freeze für eine tkinter-Schnittstelle
  • 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.