我正在为dict寻找一个"更新和插入"操作,有一个常见的工作:对于列表中的给定键,每个键都更新dict中的值。但如果dict中不存在该键,则在dict中插入一个默认值,然后更新为:
for k in list:
dict[k] += 2
如果k不在dict的密钥中,那么像c++的std::map 一样执行dict[k] = 0
和dict[k] += 2
有简单的方法吗?我不想写一个if-else
几种方法:
dict.get
for k in li:
d[k] = d.get(k,0) + 2
设置默认值
for k in li:
d[k] = d.setdefault(k,0) + 2
您会注意到,这基本上等同于get
语法。两者之间的区别在于,对setdefault
的调用实际上会创建默认值(如果它还不存在的话(,所以您也可以写:
for k in li:
d.setdefault(k,0)
d[k] += 2
使用默认dict
from collections import defaultdict
d = defaultdict(int)
for k in list:
d[k] += 2
(不要将列表命名为list
,也不要将dicts命名为dict
;这些名称会影响内置类型(
进行时
dict[k] += 2
这意味着
dict[k] = dict[k] + 2
因此,Python试图获取密钥k
的值,但没有找到。所以,它失败了。但我们可以使用dict.get
,当找不到密钥时,它将返回默认值。它可以像这个一样使用
for k in my_list:
d[k] = d.get(k, 0) + 2
在这里,如果找不到关键字,我们要求dictionary对象返回0。然后我们将右手表达式的值分配给d[k]
,它将更新/创建一个新的键。
from collections import defaultdict
d = defaultdict(int)
d['whatever'] += 2
dict[k]=dict.get(k,0)+=2
就是你会怎么做。