Pythonic在构建字典时增加值的方法

时间:2017-08-19 21:54:19

标签: python dictionary

来自工作脚本的代码片段;我只是好奇是否有一种“更漂亮”的方式来实现相同的结果。

countries[ ctry ] += 1

在awk中,我本可以使用a,但python引发了一个关键错误(可以理解)。

3 个答案:

答案 0 :(得分:4)

您可以将countries更改为collections.defaultdict对象,而不是使用普通字典。顾名思义,如果密钥尚未存在,collections.defaultdict允许您在字典中插入默认值:

from collections import defaultdict
countries = defaultdict(int)

然后你的snippit变成一行:

countries[cntry] += 1

如果您无法使用collections.defaultdict,则可以使用"请求原谅而不是许可"成语而不是:

try:
    countries[ ctry ] += 1
except KeyError:
    countries[ ctry ] = 1

虽然上面的行为与条件陈述相似,但考虑更多" Pythonic"因为使用了try/except而不是if/else

答案 1 :(得分:3)

以下是更多的pythonic:

countries[ctry] = countries.get(ctry, 0) + 1

或者

{{1}}

答案 2 :(得分:2)

另一种选择是使用defaultdict:

from collections import defaultdict
countries = defaultdict(int)
countries[ctry] += 1

速度测试:

%timeit countries['Westeros'] += 1
10000000 loops, best of 3: 79 ns per loop

countries = {}
%timeit countries['Westeros'] = countries.get('Westeros', 0) + 1
1000000 loops, best of 3: 164 ns per loop