最优雅的方式来计算列表中的整数

时间:2012-03-17 21:45:14

标签: python

我正在寻找以下最优雅的方式:

假设我想计算每个整数出现在列表中的次数;我可以这样做:

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

不是最优雅的方式;我认为我看到上面的代码被一行代替了。最优雅的方法是什么?

我意识到这可能是重复,但我环顾四周,无法找到我想要的东西。

提前谢谢你。

3 个答案:

答案 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