Intro:
Ada (mungkin) solusi terbaik. Tetapi Anda harus mengetahuinya dan mengingatnya dan kadang-kadang Anda harus berharap bahwa versi Python Anda tidak terlalu tua atau apa pun masalahnya.
Lalu ada solusi yang paling 'retas'. Mereka hebat dan pendek tetapi kadang-kadang sulit dimengerti, dibaca dan diingat.
Namun, ada alternatif untuk mencoba menemukan kembali roda. - Mengapa menciptakan kembali roda? - Umumnya karena ini adalah cara yang sangat baik untuk belajar (dan kadang-kadang hanya karena alat yang sudah ada tidak melakukan apa yang Anda inginkan dan / atau cara Anda suka) dan cara termudah jika Anda tidak tahu atau jangan ingat alat yang sempurna untuk masalah Anda.
Jadi , saya mengusulkan untuk menemukan kembali roda Counterkelas dari collectionsmodul (setidaknya sebagian):
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}
Mungkin akan ada cara lain untuk mengimplementasikannya dan sudah ada alat untuk melakukan itu tetapi selalu menyenangkan untuk memvisualisasikan bagaimana hal-hal pada dasarnya akan bekerja.
sum(counters)sayangnya tidak bekerja.