python dict添加和修改操作



我正在为dict寻找一个"更新和插入"操作,有一个常见的工作:对于列表中的给定键,每个键都更新dict中的值。但如果dict中不存在该键,则在dict中插入一个默认值,然后更新为:

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

如果k不在dict的密钥中,那么像c++的std::map 一样执行dict[k] = 0dict[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

就是你会怎么做。

最新更新