5 valeurs maximales dans un dictionnaire python

j'ai un dictionnaire comme ceci:

A = {'a':10, 'b':843, 'c': 39,.....}

je veux obtenir les 5 valeurs maximum de ce dict et stocker un nouveau dict avec cela. Pour obtenir le maximum de valeur que j'ai fait:

max(A.iteritems(), key=operator.itemgetter(1))[0:]

c'est peut-être une tâche facile, mais je suis coincé sur une longue période. S'il vous plaît aider!!!

43
demandé sur Alejandro 2011-08-26 01:18:40

4 réponses

vous êtes proche. Vous pouvez trier la liste en utilisant sorted [docs] et prendre la première à cinq éléments:

newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])

Voir aussi: Python Triing HowTo

51
répondu Felix Kling 2011-08-25 21:21:24

Pas besoin d'utiliser iteritems et itemgetter. La méthode get de la dict marche très bien.

max(A, key=A.get)

de Même pour le tri:

sorted(A, key=A.get, reverse=True)[:5]

enfin, si la taille du DCT n'est pas limitée, l'utilisation d'un tas sera éventuellement plus rapide qu'un tri complet.

import heapq
heapq.nlargest(5, A, key=A.get)

pour plus d'information, consultez le heapq documentation.

82
répondu A. Coady 2011-08-25 22:06:55

Vous pouvez utiliser collections.Compteur ici:

dict(Counter(A).most_common(5))

Exemple:

>>> from collections import Counter
>>> A = {'a' : 1, 'b' : 3, 'c' : 2, 'd' : 4, 'e' : 0, 'f' :5}
>>> dict(Counter(A).most_common(5))
{'a': 1, 'c': 2, 'b': 3, 'd': 4, 'f': 5}
29
répondu Akavall 2014-07-27 23:03:42

essaye ceci:

dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
2
répondu Gerrat 2011-08-25 21:22:02