来自工作脚本的代码片段;我只是好奇是否有一种“更漂亮”的方式来实现相同的结果。
countries[ ctry ] += 1
在awk中,我本可以使用a
,但python引发了一个关键错误(可以理解)。
答案 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