[英]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.