我正在寻找一个“更新和插入”操作的字典,有一个共同的工作:对于列表中给定的键,每个键更新字典中的值。但如果该键不字典存在,插入一个默认值到字典然后更新,如:python字典添加和修改操作
for k in list:
dict[k] += 2
如果k不是字典的键,请dict[k] = 0
和dict[k] += 2
像C++的std ::地图
有没有简单的方法?我不想写一个if-else
我正在寻找一个“更新和插入”操作的字典,有一个共同的工作:对于列表中给定的键,每个键更新字典中的值。但如果该键不字典存在,插入一个默认值到字典然后更新,如:python字典添加和修改操作
for k in list:
dict[k] += 2
如果k不是字典的键,请dict[k] = 0
和dict[k] += 2
像C++的std ::地图
有没有简单的方法?我不想写一个if-else
几个方法:
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
;这些名称会影响内置类型)
dict[k]=dict.get(k,0)+=2
你是怎么做到的。
当你
dict[k] += 2
这意味着
dict[k] = dict[k] + 2
所以,巨蟒试图获取关键k
值并没有找到一个。所以它失败了。但是我们可以使用dict.get
,当没有找到密钥时它将返回默认值。它可以这样使用
for k in my_list:
d[k] = d.get(k, 0) + 2
在这里,我们要求字典对象返回0,如果找不到密钥。然后我们将右手表达式的值赋给d[k]
,它将更新/创建一个新的密钥。
from collections import defaultdict
d = defaultdict(int)
d['whatever'] += 2
那么,你的问题是以'if-else'方式陈述的,所以**不,你不能使用'if-else'。** –
是怎么回事?我的解决方案没有'if-else' – 1478963