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

时间:2017-04-17 14:59:56

标签: python dictionary try-catch keyerror

我正在尝试简化字典上的操作。问题是,有时密钥不存在,所以我必须首先尝试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'键不存在,所以我先试试。如果可能的话,我正在寻找一种跳过试用部分的方法。

谢谢!

6 个答案:

答案 0 :(得分:8)

使用defaultdict

from collections import defaultdict
x = defaultdict(int)

答案 1 :(得分:2)

也许你可以使用词典获取方法

试试这个:

import Data.Swagger.Schema
import Data.Swagger.SchemaOptions

instance ToSchema Device where
  declareNamedSchema =
    genericDeclareNamedSchema
      defaultSchemaOptions {fieldLabelModifier = \fieldLabel -> ...}

完整代码:

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

答案 2 :(得分:2)

试试这个

Get-FileCount "Y:\music (flac)\Alternative" -Extensions flac,mp3,avi,ogg

答案 3 :(得分:1)

听起来像真正想要的是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

答案 4 :(得分:0)

如果元素在字典中,您可以在添加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

答案 5 :(得分:0)

您可以使用列表推导和条件过滤字典中存在的键,然后迭代,如下所示:

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}
相关问题