Существует ли способ видеть, сколько объектов в словаре совместно использует то же значение в Python?
Скажем, то, что у меня есть словарь как:
{"a": 600, "b": 75, "c": 75, "d": 90}
Я хотел бы получить получающийся словарь как:
{600: 1, 75: 2, 90: 1}
Моя первая наивная попытка состояла бы в том, чтобы просто использовать вложенный - для цикла, и для каждого значения затем я выполню итерации по словарю снова. Существует ли лучший способ сделать это?
Для этого можно использовать 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()))]
Когда выйдет Python 2.7, вы сможете использовать его коллекции. Счетчик
, в противном случае см. рецепт счетчика
Под Python 2.7 a3
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}
>>> 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 ()
.
>>> 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}