2014-05-15 80 views
0

我正在寻找一个“更新和插入”操作的字典,有一个共同的工作:对于列表中给定的键,每个键更新字典中的值。但如果该键不字典存在,插入一个默认值到字典然后更新,如:python字典添加和修改操作

for k in list: 
    dict[k] += 2 

如果k不是字典的键,请dict[k] = 0dict[k] += 2像C++的std ::地图

有没有简单的方法?我不想写一个if-else

+0

那么,你的问题是以'if-else'方式陈述的,所以**不,你不能使用'if-else'。** –

+0

是怎么回事?我的解决方案没有'if-else' – 1478963

回答

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;这些名称会影响内置类型)

0
dict[k]=dict.get(k,0)+=2 

你是怎么做到的。

1

当你

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],它将更新/创建一个新的密钥。

1
from collections import defaultdict 
d = defaultdict(int) 
d['whatever'] += 2