Wprowadzenie:
Istnieją (prawdopodobnie) najlepsze rozwiązania. Ale musisz to wiedzieć i pamiętać o tym, a czasem musisz mieć nadzieję, że twoja wersja Pythona nie jest zbyt stara lub jakikolwiek problem.
Są też najbardziej „hackerskie” rozwiązania. Są świetne i krótkie, ale czasem trudno je zrozumieć, przeczytać i zapamiętać.
Istnieje jednak alternatywa polegająca na ponownym wymyśleniu koła. - Po co wymyślać koło? - Zasadniczo dlatego, że jest to naprawdę dobry sposób na naukę (a czasami tylko dlatego, że już istniejące narzędzie nie robi dokładnie tego, co chcesz i / lub tak, jak chcesz) i najłatwiejszy, jeśli nie wiesz lub nie pamiętam idealnego narzędzia dla twojego problemu.
Tak , że proponuje nowo koło z Counter
grupy z collections
modułem (co najmniej częściowo)
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}
Prawdopodobnie istniałby inny sposób, aby to zaimplementować i istnieją już narzędzia do tego, ale zawsze miło jest wyobrazić sobie, jak rzeczy w zasadzie będą działać.
sum(counters)
nie działa niestety.