Введение:
Есть (возможно) лучшие решения. Но вы должны знать это и помнить об этом, и иногда вы должны надеяться, что ваша версия 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)
не работает, к сожалению.