43

在 Python 中,在递增之前必须先检查一个键是否在字典中,这很烦人:

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

上面的四行是否有更短的替代品?

4

6 回答 6

78

另一种选择是:

my_dict[key] = my_dict.get(key, 0) + num
于 2012-10-20T20:06:31.553 回答
30

你有很多选择。我喜欢使用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})
于 2012-10-20T20:01:56.423 回答
9

你想要的叫做 defaultdict

请参阅http://docs.python.org/library/collections.html#collections.defaultdict

于 2012-10-20T20:01:43.567 回答
8

转换:

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

进入以下使用setdefault

my_dict[key] = my_dict.setdefault(key, 0) + num
于 2012-10-20T20:05:54.597 回答
3

还有一点不同的setdefault方式:

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

如果与其他逻辑相结合,可能会有一些优势。

于 2018-07-14T18:38:30.103 回答
0

.get.setdefault可以使用任何一种:

.get()如果没有有效的键,则给出函数中传递的默认值

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

.setdefault ()创建一个传递默认值的键

my_dict[key] = my_dict.setdefault(key, 0) + num
于 2020-04-17T22:43:43.493 回答