我正在寻找一个有效的方法,给定一个列表,输出一个字典,其中键作为列表中的不同值,字典的值是列表中该键的计数。
例如,
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
答案 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})
注意,Counter
是dict
的子类:
>>> isinstance(b, dict)
True