web-dev-qa-db-fra.com

Python incrément du dictionnaire

Dans Python c'est ennuyeux de devoir 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

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

33
Paul S.

Une alternative est:

my_dict[key] = my_dict.get(key, 0) + num
57
Nicola Musatti

Vous avez plusieurs options. J'aime 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})
22
Blender
8
Eric

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
8
dnozay

Il y a aussi un peu différent setdefault:

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

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

0
Roman Susi