有没有办法看到字典中有多少项在Python中共享相同的值?
假设我有一个字典:
{"a": 600, "b": 75, "c": 75, "d": 90}
我想得到一个结果字典,如:
{600: 1, 75: 2, 90: 1}
我的第一个天真的尝试是只使用嵌套for循环,然后对于每个值,我会再次遍历字典。有更好的方法吗?
答案 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}