Сколько объектов в словаре совместно использует то же значение в Python

Существует ли способ видеть, сколько объектов в словаре совместно использует то же значение в Python?

Скажем, то, что у меня есть словарь как:

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

Я хотел бы получить получающийся словарь как:

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

Моя первая наивная попытка состояла бы в том, чтобы просто использовать вложенный - для цикла, и для каждого значения затем я выполню итерации по словарю снова. Существует ли лучший способ сделать это?

5
задан Jared 6 March 2010 в 19:55
поделиться

5 ответов

Для этого можно использовать 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()))]
7
ответ дан 13 December 2019 в 22:06
поделиться

Когда выйдет 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}

2
ответ дан 13 December 2019 в 22:06
поделиться
>>> 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}
>>>
1
ответ дан 13 December 2019 в 22:06
поделиться

Используйте Counter (2.7+, см. Ниже ссылку для реализации более старых версий) вместе с dict.values ​​() .

0
ответ дан 13 December 2019 в 22:06
поделиться
>>> 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}
0
ответ дан 13 December 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: