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

时间:2014-07-02 05:56:11

标签: python dictionary

我有一段代码正在迭代一个列表然后根据键在dict中累积值,丑陋的部分是我需要检查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)

2 个答案:

答案 0 :(得分:3)

您可以使用内置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

答案 1 :(得分:3)

这是在python中使用dicts时的常见模式,因此集合模块中有 defaultdict 。这允许您为不在字典中的键指定默认值。 e.g:

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]