列表计数的Python字典

时间:2017-02-09 03:55:18

标签: python dictionary

我正在寻找一个有效的方法,给定一个列表,输出一个字典,其中键作为列表中的不同值,字典的值是列表中该键的计数。

例如,

a = [1,1,1,2,2,3,]      ##input
b = {1: 3, 2: 2, 3: 1}  ##output

我发现{i: a.count(i) for i in a} 工作正常,但会进行过多的计算,例如在输入列表a=[1,1,1]中,它会用值[3]覆盖键[1] 3次。

我也可以像下面那样做更多的手动,但我正在寻找更优雅和简单的东西。

b = {}
for i in a:
    if i in b:
        b[i] += 1
    else:
        b[a] = 1

1 个答案:

答案 0 :(得分:3)

使用collections.Counter

>>> from collections import Counter
>>> a = [1,1,1,2,2,3,]
>>> b = Counter(a)
>>> b
Counter({1: 3, 2: 2, 3: 1})

注意,Counterdict的子类:

>>> isinstance(b, dict)
True