Intro:
Il y a (probablement) la meilleure des solutions. Mais vous devez le savoir et se souvenir de lui et parfois il faut espérer que votre version de Python n'est pas trop vieux ou quoi que peut être le problème.
Puis il y a le plus de "hacky " solutions". Ils sont grands et court, mais sont parfois difficiles à comprendre, à lire et à retenir.
Il est, cependant, une alternative qui consiste à essayer de réinventer la roue.
- Pourquoi réinventer la roue?
- En général, parce que c'est vraiment une bonne façon d'apprendre (et parfois simplement parce que le déjà-outil existant ne pas faire exactement ce que vous voulez et/ou la façon dont vous le souhaitez) et de la façon la plus simple si vous ne savez pas ou ne me souviens pas l'outil parfait pour votre problème.
Donc, je propose de réinventer la roue de l' Counter
classe de l' collections
module (partiellement 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çon de mettre en œuvre et il existe déjà des outils pour le faire, mais c'est toujours agréable de voir comment les choses allaient se fait essentiellement.