在 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})
你想要的叫做 defaultdict
请参阅http://docs.python.org/library/collections.html#collections.defaultdict
转换:
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
如果与其他逻辑相结合,可能会有一些优势。
.get
或.setdefault
可以使用任何一种:
.get()
如果没有有效的键,则给出函数中传递的默认值
my_dict[key] = my_dict.get(key, 0) + num
.setdefault ()
创建一个传递默认值的键
my_dict[key] = my_dict.setdefault(key, 0) + num