web-dev-qa-db-ja.com

Python辞書の増分

Pythonでは、キーをインクリメントする前に、まずキーが辞書にあるかどうかを確認する必要があります。

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

上記の4行の短い代替物はありますか?

29
Paul S.

別の方法は次のとおりです。

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

かなりの数のオプションがあります。 Counter を使用するのが好きです:

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

または 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

欲しいものはdefaultdictと呼ばれます

http://docs.python.org/library/collections.html#collections.defaultdict を参照してください

8
Eric

変換:

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

setdefault を使用して次のようにします

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

少し異なるsetdefault方法もあります:

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

他のロジックと組み合わせると、いくつかの利点があります。

0
Roman Susi