2012-02-22 2 views
3

У меня есть словарь, который содержит значения, подобные этому {a: 3, b: 9, c: 88, d: 3} Я хочу рассчитать, сколько раз определенное число появляется в словаре , Например, в словаре выше 3 появляется дважды в словаре Пожалуйста, помогите написать Python скриптВычисление частоты значений в словаре

ответ

9

Вы должны использовать collections.Counter:

>>> from collections import Counter 
>>> d = {'a':3, 'b':9, 'c':88, 'd': 3} 
>>> Counter(d.values()).most_common() 
[(3, 2), (88, 1), (9, 1)] 
+1

(Для больших словарей, '.itervalues ​​()' может быть более эффективным в Py 2.x) – Amber

+0

Хороший момент. Но поскольку я лично использую Python 3, а 'values' работает в обеих версиях, я просто добавлю необходимые изменения в список причуд. Программистам Python 2 все равно придется работать;) – phihag

+0

Yup. :) Просто замечал это для будущих читателей, не предлагая изменить свой ответ. – Amber

1

Я хотел бы использовать defaultdict, чтобы сделать это (в основном более общий вариант счетчик). Это было с 2.4.

from collections import defaultdict 
counter = defaultdict(int) 

b = {'a':3,'b':9,'c':88,'d':3} 
for k,v in b.iteritems(): 
    counter[v]+=1 

print counter[3] 
print counter[88] 

#will print 
>> 2 
>> 3 
+2

Использовать 'itervalues' ... заметить, как' k' не используется в вашем фрагменте? –

Смежные вопросы