Intro:
Es gibt die (wahrscheinlich) besten Lösungen. Aber Sie müssen es wissen und sich daran erinnern, und manchmal müssen Sie hoffen, dass Ihre Python-Version nicht zu alt ist oder was auch immer das Problem sein könnte.
Dann gibt es die "hackigsten" Lösungen. Sie sind großartig und kurz, aber manchmal schwer zu verstehen, zu lesen und sich zu erinnern.
Es gibt jedoch eine Alternative, zu versuchen, das Rad neu zu erfinden. - Warum das Rad neu erfinden? - Im Allgemeinen, weil es eine wirklich gute Art zu lernen ist (und manchmal nur, weil das bereits vorhandene Tool nicht genau das tut, was Sie möchten und / oder wie Sie es möchten) und die einfachste Art, wenn Sie es nicht wissen oder Ich erinnere mich nicht an das perfekte Werkzeug für Ihr Problem.
Also schlage ich vor, das Rad der Counter
Klasse aus dem collections
Modul neu zu erfinden (zumindest teilweise):
class MyDict(dict):
def __add__(self, oth):
r = self.copy()
try:
for key, val in oth.items():
if key in r:
r[key] += val # You can custom it here
else:
r[key] = val
except AttributeError: # In case oth isn't a dict
return NotImplemented # The convention when a case isn't handled
return r
a = MyDict({'a':1, 'b':2, 'c':3})
b = MyDict({'b':3, 'c':4, 'd':5})
print(a+b) # Output {'a':1, 'b': 5, 'c': 7, 'd': 5}
Es gibt wahrscheinlich andere Möglichkeiten, dies zu implementieren, und es gibt bereits Tools, um dies zu tun, aber es ist immer schön zu visualisieren, wie die Dinge im Grunde funktionieren würden.
sum(counters)
funktioniert leider nicht.