Вступ:
Є (мабуть) найкращі рішення. Але ви повинні це знати і пам’ятати, і іноді вам доводиться сподіватися, що ваша версія Python не надто стара, або все, що може бути проблемою.
Тоді є найбільш "хакі" рішення. Вони великі і короткі, але іноді їх важко зрозуміти, прочитати і запам'ятати.
Однак існує альтернатива, яка полягає у тому, щоб спробувати винайти колесо. - Навіщо винаходити колесо? - Взагалі тому, що це дійсно хороший спосіб вчитися (а іноді просто тому, що вже існуючий інструмент не робить саме те, що ви хотіли б і / або так, як вам хотілося б) і найпростіший спосіб, якщо ви не знаєте або не пам'ятайте ідеальний інструмент для вашої проблеми.
Отже , я пропоную винайти колесо Counter
класу з collections
модуля (хоча б частково):
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}
Можливо, є й інший спосіб здійснити це, і вже є інструменти для цього, але завжди приємно візуалізувати, як би в основному все працювало.
sum(counters)
не працює, на жаль.