我正在寻找以下最优雅的方式:
假设我想计算每个整数出现在列表中的次数;我可以这样做:
x = [1,2,3,2,4,1,2,5,7,2]
dicto = {}
for num in x:
try:
dicto[num] = dicto[num] + 1
except KeyError:
dicto[num] = 1
然而,我认为
try:
dicto[num] = dicto[num] + 1
except KeyError:
dicto[num] = 1
不是最优雅的方式;我认为我看到上面的代码被一行代替了。最优雅的方法是什么?
我意识到这可能是重复,但我环顾四周,无法找到我想要的东西。
提前谢谢你。
答案 0 :(得分:8)
使用Counter类
>>> from collections import Counter
>>> x = [1,2,3,2,4,1,2,5,7,2]
>>> c = Counter(x)
现在您可以使用Counter
对象c
作为字典。
>>> c[1]
2
>>> c[10]
0
(这适用于不存在的值)
答案 1 :(得分:3)
>>> from collections import defaultdict
>>> x = [1,2,3,2,4,1,2,5,7,2]
>>> d = defaultdict(int)
>>> for i in x:
d[i] += 1
>>> dict(d)
{1: 2, 2: 4, 3: 1, 4: 1, 5: 1, 7: 1}
或者只是collections.Counter
,如果您使用的是Python 2.7 +。
答案 2 :(得分:1)
Bucket sort完全符合算法(discussion)。当您不需要Counter
:
from collections import defaultdict
wdict = defaultdict(int)
for word in words:
wdict[word] += 1