在Python中,必须先检查字典中是否存在某个键,然后才能对其进行递增操作,这很麻烦:
if key in my_dict:
my_dict[key] += num
else:
my_dict[key] = num
上面的四行代码有没有更简短的替代方法?
在Python中,必须先检查字典中是否存在某个键,然后才能对其进行递增操作,这很麻烦:
if key in my_dict:
my_dict[key] += num
else:
my_dict[key] = num
上面的四行代码有没有更简短的替代方法?
另一种选择是:
my_dict[key] = my_dict.get(key, 0) + num
你有很多选择。我喜欢使用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})
lambda: 0
,你可以简单地说 int
。 - hughdbrownCounter
也支持默认的0功能。我一直在使用Nicola的解决方案,但没有它更好。 - Czechnologytransform:
if key in my_dict:
my_dict[key] += num
else:
my_dict[key] = num
使用setdefault
将以下内容转换为:
my_dict[key] = my_dict.setdefault(key, 0) + num
还有一种略微不同的setdefault
方法:
my_dict.setdefault(key, 0)
my_dict[key] += num
如果与其他逻辑组合使用,可能会带来一些优势。
dict = {}
dict['1'] = 10
dict['1'] = dict.get('1', 0) + 1 if '1' in dict else 1
print(dict)
.get
或 .setdefault
都可以使用:
.get()
如果没有有效的键,则在函数中传递默认值。my_dict[key] = my_dict.get(key, 0) + num
.setdefault()
创建一个带有默认值的键
my_dict[key] = my_dict.setdefault(key, 0) + num