Pythonic way to increment value when building dictionary
本问题已经有最佳答案,请猛点这里访问。
工作脚本中的一小段代码;我只是好奇是否有一种"更漂亮"的方法来实现相同的结果。
1 2 3 4 | if ctry in countries: countries[ ctry ] += 1 else: countries[ ctry ] = 1 |
在awk中,我本可以使用
您可以将
1 2 | from collections import defaultdict countries = defaultdict(int) |
然后你的狙击手变成一条线:
1 | countries[cntry] += 1 |
如果你不能使用
1 2 3 4 | try: countries[ ctry ] += 1 except KeyError: countries[ ctry ] = 1 |
尽管上述行为与您的条件陈述类似,但我们认为更多的是"Python式的",因为使用的是
下面是一个有点像Python:
1 | countries[ctry] = 1 if ctry not in countries else countries[ctry] + 1 |
或
1 | countries[ctry] = countries.get(ctry, 0) + 1 |
另一种选择是使用defaultdict:
1 2 3 | from collections import defaultdict countries = defaultdict(int) countries[ctry] += 1 |
速度测试:
1 2 3 4 5 6 | %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 |