2012-02-22 3 views
3

J'ai un dictionnaire qui contient des valeurs comme ceci {a: 3, b: 9, c: 88, d: 3} Je veux calculer combien de fois un nombre particulier apparaît dans le dictionnaire ci-dessus . Par exemple dans le dictionnaire ci-dessus 3 apparaît deux fois dans le dictionnaire S'il vous plaît aider à écrire script pythonCalcul de la fréquence des valeurs dans le dictionnaire

Répondre

9

Vous devez utiliser 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

(Pour les grands dictionnaires, '.itervalues ​​()' pourrait être plus efficace dans Py 2.x) – Amber

+0

Bon point. Mais puisque j'utilise personnellement Python 3 et que 'values' arrive à fonctionner sur les deux versions, je vais juste ajouter le changement nécessaire à la liste des bizarreries que les programmeurs Python 2 doivent contourner de toute façon;) – phihag

+0

Yup. :) Je le notais juste pour les futurs lecteurs, ne suggérant pas que vous changiez votre réponse. – Amber

1

j'utiliser un defaultdict pour le faire (essentiellement la version plus générale de le compteur). Cela a été en depuis 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

Utilisez 'itervalues' ... remarquez que' k' n'est pas utilisé dans votre extrait de code? –

Questions connexes