80 votes

Dictionnaire Python: ajouter ou incrémenter une entrée

Je suis en train de ré-engager avec Python après une longue absence, et de l'aimer. Cependant, je me retrouve à venir à travers un motif. Je continue à penser qu'il doit y avoir une meilleure façon d'exprimer ce que je veux et que je suis probablement le faire dans le mauvais sens.

Le code que j'écris est de la forme suivante:

# foo is a dictionary
if foo.has_key(bar):
  foo[bar] += 1
else:
  foo[bar] = 1

J'écris beaucoup dans mes programmes. Ma première réaction est de le pousser à une fonction d'assistance, mais souvent, les bibliothèques python offre ce genre de choses déjà.

Est-il une simple petite syntaxe de truc que je suis absent? Ou est-ce la façon dont il devrait être fait?

136voto

sth Points 91594

La méthode dict 's get() prend un deuxième paramètre facultatif qui peut être utilisé pour fournir une valeur par défaut si la clé demandée n'est pas trouvée:

 foo[bar] = foo.get(bar, 0) + 1
 

122voto

Tamás Points 18211

Utilisez un defaultdict :

 from collections import defaultdict

foo = defaultdict(int)
foo[bar] += 1
 

En Python> = 2.7, vous avez également une classe Counter distincte à ces fins. Pour Python 2.5 et 2.6, vous pouvez utiliser sa version backported .

4voto

Santa Points 6013

Vous pouvez également tirer parti de la structure de contrôle pour la gestion des exceptions. Une exception KeyError est levée par un dictionnaire lorsque vous essayez d'affecter une valeur à une clé inexistante:

 my_dict = {}
try:
    my_dict['a'] += 1
except KeyError, err:    # in 2.6: `except KeyError as err:`
    my_dict['a'] = 1
 

4voto

thetaiko Points 5620

Pour Python> = 2.5, vous pouvez effectuer les opérations suivantes:

 foo[bar] = 1 if bar not in foo else foo[bar]+1
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X