Incrément de dictionnaire Python

En Python, il est ennuyeux d'avoir à vérifier si une clé est dans le dictionnaire avant de l'incrémenter:

if key in my_dict:
  my_dict[key] += num
else:
  my_dict[key] = num

Y a - t-il un substitut plus court pour les quatre lignes ci-dessus?

21
demandé sur Paul S. 2012-10-21 00:00:03

5 réponses

Une alternative est:

my_dict[key] = my_dict.get(key, 0) + num
43
répondu Nicola Musatti 2012-10-20 20:06:31

Vous avez pas mal d'options. J'aime bien les utiliser Counter:

>>> from collections import Counter
>>> d = Counter()
>>> d[12] += 3
>>> d
Counter({12: 3})

Ou defaultdict:

>>> from collections import defaultdict
>>> d = defaultdict(int)  # int() == 0, so the default value for each key is 0
>>> d[12] += 3
>>> d
defaultdict(<function <lambda> at 0x7ff2fe7d37d0>, {12: 3})
15
répondu Blender 2017-12-22 15:33:33

Ce que vous voulez s'appelle un defaultdict

Voir http://docs.python.org/library/collections.html#collections.defaultdict

8
répondu Eric 2012-10-20 20:01:43

Transformer:

if key in my_dict:
  my_dict[key] += num
else:
  my_dict[key] = num

Dans ce qui suit en utilisant setdefault:

my_dict[key] = my_dict.setdefault(key, 0) + num
7
répondu dnozay 2012-10-20 20:05:54

Il est également un peu différent setdefault façon:

my_dict.setdefault(key, 0)
my_dict[key] += num

Qui peut avoir certains avantages s'il est combiné avec une autre logique.

0
répondu Roman Susi 2018-07-14 18:38:30