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