Introdução:
Existem as (provavelmente) melhores soluções. Mas você precisa conhecê-lo e lembrá-lo e, às vezes, espera que sua versão do Python não seja muito antiga ou seja qual for o problema.
Depois, há as soluções mais 'hacky'. Eles são ótimos e curtos, mas às vezes são difíceis de entender, ler e lembrar.
Existe, no entanto, uma alternativa que é tentar reinventar a roda. - Por que reinventar a roda? - Geralmente porque é uma maneira muito boa de aprender (e às vezes apenas porque a ferramenta já existente não faz exatamente o que você gostaria e / ou da maneira que você gostaria) e a maneira mais fácil se você não conhece ou não lembre-se da ferramenta perfeita para o seu problema.
Então , proponho reinventar a roda da Counter
classe a partir do collections
módulo (pelo menos parcialmente):
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}
Provavelmente haveria outras maneiras de implementar isso e já existem ferramentas para fazer isso, mas é sempre bom visualizar como as coisas funcionariam basicamente.
sum(counters)
infelizmente não funciona.