有没有办法查看字典中有多少项共享Python中的相同值?字典中有多少项共享Python中的相同值
比方说,我有一个像一本字典:
{"a": 600, "b": 75, "c": 75, "d": 90}
我想获得一个导致词典,如:
{600: 1, 75: 2, 90: 1}
我第一次尝试幼稚将只使用一个nested- for循环和每个值,然后我会再次遍历字典。有一个更好的方法吗?
有没有办法查看字典中有多少项共享Python中的相同值?字典中有多少项共享Python中的相同值
比方说,我有一个像一本字典:
{"a": 600, "b": 75, "c": 75, "d": 90}
我想获得一个导致词典,如:
{600: 1, 75: 2, 90: 1}
我第一次尝试幼稚将只使用一个nested- for循环和每个值,然后我会再次遍历字典。有一个更好的方法吗?
您可以为此使用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()))]
>>> 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}
>>>
使用Counter
(2.7+,请参阅下面的链接了解老版本的实现)与dict.values()
一起。
当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}
py 3.1已经不存在了,并且不需要每天几次重新发布完全相同的答案。 – SilentGhost 2010-03-06 20:10:35
@SilentGhost,Py 3.1已经出来了,但是2.7不是(仍然是alpha) - 只要人们提出显然需要Counter的问题,将它指向它是完全正确的! – 2010-03-06 23:20:44
@Alex:它是一个副本的副本,它有同一用户在每个线程中给出的重复答案。而不是乘法实体,最好完全解决问题。 – SilentGhost 2010-03-06 23:43:12
>>> 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}
为我工作!谢谢WoLpH,但我不得不调整它来使用字典,而不是:{k:len(list(v))for k,v in itertools.groupby(x.values())} – Jared 2010-03-06 20:04:35
在一般情况下不起作用没有**排序**这些值!例如。与“排序”的Python内置函数。 – 2010-03-06 23:21:32