Intro: Das sind die (wahrscheinlich) besten Lösungen. Aber man muss sie kennen und sich merken und manchmal muss man hoffen, dass die Python-Version nicht zu alt ist oder was auch immer das Problem sein könnte.
Und dann gibt es noch die "hakeligsten" Lösungen. Sie sind großartig und kurz, aber manchmal sind sie schwer zu verstehen, zu lesen und zu merken.
Es gibt jedoch eine Alternative, nämlich den Versuch, das Rad neu zu erfinden. - Warum das Rad neu erfinden? - Im Allgemeinen, weil es eine gute Möglichkeit ist, etwas zu lernen (und manchmal auch nur, weil das bereits vorhandene Werkzeug nicht genau das tut, was man möchte und/oder wie man es möchte), und weil es der einfachste Weg ist, wenn man das perfekte Werkzeug für sein Problem nicht kennt oder sich nicht daran erinnert.
Also schlage ich vor, das Rad der Geschichte neu zu erfinden. Counter
Klasse aus der collections
Modul (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 gäbe wahrscheinlich andere Möglichkeiten, dies zu implementieren, und es gibt bereits entsprechende Tools, aber es ist immer schön, sich vorzustellen, wie die Dinge im Grunde funktionieren würden.