Intro:
Il existe (probablement) les meilleures solutions. Mais vous devez le savoir et vous en souvenir et parfois vous devez espérer que votre version Python n'est pas trop ancienne ou quel que soit le problème.
Ensuite, il y a les solutions les plus «hacky». Ils sont grands et courts mais parfois difficiles à comprendre, à lire et à retenir.
Il existe cependant une alternative qui consiste à essayer de réinventer la roue. - Pourquoi réinventer la roue? - Généralement parce que c'est un très bon moyen d'apprendre (et parfois simplement parce que l'outil déjà existant ne fait pas exactement ce que vous voudriez et / ou comme vous le voudriez) et le plus simple si vous ne savez pas ou ne me souviens pas de l'outil parfait pour votre problème.
Donc , je propose de réinventer la roue de la Counter
classe à partir du collections
module (en partie au moins):
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}
Il y aurait probablement d'autres façons de l'implémenter et il existe déjà des outils pour le faire, mais il est toujours agréable de visualiser comment les choses fonctionneraient fondamentalement.
sum(counters)
ne fonctionne pas, malheureusement.