字典中有多少项在Python中共享相同的值

时间:2010-03-06 19:55:10

标签: python dictionary

有没有办法看到字典中有多少项在Python中共享相同的值?

假设我有一个字典:

{"a": 600, "b": 75, "c": 75, "d": 90}

我想得到一个结果字典,如:

{600: 1, 75: 2, 90: 1}

我的第一个天真的尝试是只使用嵌套for循环,然后对于每个值,我会再次遍历字典。有更好的方法吗?

5 个答案:

答案 0 :(得分:7)

你可以使用itertools.groupby。

import itertools
x = {"a": 600, "b": 75, "c": 75, "d": 90}
[(k, len(list(v))) for k, v in itertools.groupby(sorted(x.values()))]

答案 1 :(得分:2)

当Python 2.7问世时,你可以使用它的collections.Counter class

否则请参阅counter receipe

在Python 2.7a3下

from collections import Counter
items = {"a": 600, "b": 75, "c": 75, "d": 90}    
c = Counter( items )

print(  dict( c.items() ) )

输出

  

{600:1,90:1,75:2}

答案 2 :(得分:1)

>>> a = {"a": 600, "b": 75, "c": 75, "d": 90}
>>> b = {}
>>> for k,v in a.iteritems():
...     b[v] = b.get(v,0) + 1
...
>>> b
{600: 1, 90: 1, 75: 2}
>>>

答案 3 :(得分:0)

使用Counter(2.7+,请参阅下面的链接以了解旧版本的实施情况)以及dict.values()

答案 4 :(得分:0)

>>> a = {"a": 600, "b": 75, "c": 75, "d": 90}
>>> d={}
>>> for v in a.values():
...   if not v in d: d[v]=1
...   else: d[v]+=1
...
>>> d
{600: 1, 90: 1, 75: 2}