Introducción:
Existen las (probablemente) mejores soluciones. Pero debe saberlo y recordarlo, y a veces tiene que esperar que su versión de Python no sea demasiado antigua o sea cual sea el problema.
Luego están las soluciones más 'hacky'. Son geniales y cortos, pero a veces son difíciles de entender, leer y recordar.
Sin embargo, existe una alternativa que consiste en intentar reinventar la rueda. - ¿Por qué reinventar la rueda? - Generalmente porque es una muy buena manera de aprender (y a veces solo porque la herramienta ya existente no hace exactamente lo que le gustaría y / o como le gustaría) y la forma más fácil si no sabe o No recuerdo la herramienta perfecta para su problema.
Por lo tanto , propongo reinventar la rueda de la Counter
clase desde el collections
módulo (al 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}
Probablemente habría otra forma de implementar eso y ya hay herramientas para hacerlo, pero siempre es bueno visualizar cómo funcionarían las cosas básicamente.
sum(counters)
no funciona, desafortunadamente