繁体   English   中英

如何干净地更新字典中的值?

[英]How to update the values in a dict cleanly?

我有一段代码正在迭代一个列表,然后根据键在一个dict中累积值,丑陋的部分是我需要检查该键中是否已存在该键,如果不存在,则需要设置值先为零。

我想知道是否有更优雅的风格来实现这一点:

for r in records:
    if not d.has_key(r[0]):
        d[r[0]] = 0
    d[r[0]] += r[1]

更进一步,如果该值是一个列表,那么如何重写以下代码:

for (key, value) in records:
    if not d.has_key(key):
        d[key] = []
    d[key].append(value)

您可以使用内置的dict.get方法获取默认值,如下所示

for r in records:
    d[r[0]] = d.get(r[0], 0) + r[1]

如果字典中没有键,则dict.get的第二个参数是要返回的默认值。

更好的是,您可以像这样解压值

for (key, value) in records:
    d[key] = d.get(key, 0) + value

这是在python中使用dict时的常见模式,因此collections模块中有一个defaultdict 这使您可以为不在词典中的键指定默认值。 例如:

from collections import defaultdict
d = defaultdict(int)
d[10] += 1

In [19]: dict(d)
Out[19]: {10: 1}

如您所见,如果使用defaultdict,则不必检查dict中是否存在密钥。

d = defaultdict(int)
for r in records:
    d[r[0]] += r[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM