将值添加到 dict 键的 pythonic 方法,但如果不存在,则将其启动为 0,然后添加值

pythonic way to add value to a dict key but if doesn't exist start it to 0 and then add the value

我正在尝试简化对字典的操作。问题是,有时密钥不存在,所以我必须先尝试 KeyError 但我觉得我做得太过了。

示例:

x = {'a': 0, 'b': 0}

for key in ['a', 'b', 'c']:
    for i in range(0, 10):
        try:
            x[key] += i
        except KeyError:
            x[key] = 0
            x[key] += i

如您所见,'c' 键不存在,所以我先试试。如果可能的话,我正在寻找一种跳过 try 部分的方法。

谢谢!

使用默认字典

from collections import defaultdict
x = defaultdict(int)

您可以在添加 i 之前检查该元素是否在字典中。如果不是,则创建一个新元素并设置默认值 0。然后你表现正常并添加 i

x = {'a': 0, 'b': 0}

for key in ['a', 'b', 'c']:
    for i in range(0, 10):
        if key not in x:
            x[key] = 0
        x[key] += i

或许可以使用字典的get方法

试试这个:

x[key] = x.get(key,0) +i

完整代码:

x = {'a': 0, 'b': 0}

for key in ['a', 'b', 'c']:
    for i in range(0, 10):
        x[key] = x.get(key,0) +i

试试这个

x = {'a': 0, 'b': 0}

for key in ['a', 'b', 'c']:
    for i in range(0, 10):
       x[key] = x.get(key, 0) + i

您可以使用列表理解和条件筛选字典中存在的键,然后遍历它,如下所示:

x = {'a': 0, 'b': 0}

for key in [key for key in ['a', 'b', 'c'] if key in x.keys()]:
    for i in range(0, 10):
        x[key] += i

print x

产出

{'a': 45, 'b': 45}

听起来您真正想要的是Counter:

https://docs.python.org/2/library/collections.html#collections.Counter https://docs.python.org/3.6/library/collections.html#collections.Counter

from collections import Counter
c = Counter()

for key in ['a', 'b', 'c']:
    for i in range(10):
        c[key] += i