0

如何计算python中字典中值的出现次数

a = dict()
a['cat'] =      1
a['fish'] =     1
a['dog'] =      2  
a['bat'] =      3
a['aardvark'] = 3
a['lion'] =    4  
a['wallaby'] =  5
a['badger'] =   5

预期输出:

KEY  Count
 1   2
 2   1
 3   2
 4   1
 5   2 

EDIT

抱歉,我是说计数值

4

6 回答 6

3

我怀疑你想使用collections.Counter;它让您轻松处理大多数计数用例。

from collections import Counter
a = dict()
a['cat'] =      1
a['fish'] =     1
a['dog'] =      2  
a['bat'] =      3
a['aardvark'] = 3
a['lion'] =    4  
a['wallaby'] =  5
a['badger'] =   5

print Counter(a.values())    

输出:Counter({1: 2, 3: 2, 5: 2, 2: 1, 4: 1})

或者,为您稍微格式化一下:

for key, value in Counter(a.values()).most_common():
    print key, value

输出:

1 2
3 2
5 2
2 1
4 1

或者,要完全匹配您的输出:

for key, value in sorted(Counter(a.values()).items()):
    print key, value

在这里,我们对键(数字 1 到 5)进行了排序。

于 2012-07-02T12:58:41.480 回答
1
>>> from collections import Counter
>>> Counter(a.values())
Counter({1: 2, 3: 2, 5: 2, 2: 1, 4: 1})
于 2012-07-02T12:58:53.163 回答
1

collections.Counter 是这项工作的最佳工具(参见 Martijn Pieters 的回答)——但是,它是在 python 2.7 中引入的。如果您需要 2.5+ 解决方案:

from collections import defaultdict
d=defaultdict(int)
for v in a.values():
    d[v]+=1
于 2012-07-02T13:05:40.420 回答
0

如果您想要这些值的总和,请执行以下操作:

sum(a.values())

如果您想要出现次数的频率,请执行以下操作:

from collections import Counter
Counter(a.values()).items()
于 2012-07-02T12:59:10.227 回答
0

我有一种可怕的感觉,虽然不清楚,但这len(a)可能是一个答案......

但是,也有可能:

from collections import Counter
Counter(a.values())

也有可能。

于 2012-07-02T13:01:41.733 回答
0

你可以很容易地做到这一点,而无需导入任何东西:

results={}
for v in a.values():
   results[v]=results.get(v, 0) + 1

for k,v in results.items():
    print k,v

输出:

1 2
2 1
3 2
4 1
5 2
于 2012-07-02T13:27:49.887 回答