web-dev-qa-db-fra.com

5 valeurs maximales dans un dictionnaire python

J'ai un dictionnaire comme celui-ci:

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

Je veux obtenir les 5 valeurs maximales de ce dict et enregistrer un nouveau dict avec cela. Pour obtenir la valeur maximale que j'ai faite:

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

C'est peut-être une tâche facile, mais je suis coincé dessus depuis longtemps. S'il vous plaît, aidez !!!

52
Alejandro

Tu es proche. Vous pouvez trier la liste en utilisant sorted[docs] et prenez les cinq premiers éléments:

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

Voir aussi: HowTo de tri Python

55
Felix Kling

Pas besoin d'utiliser des iteritems et itemgetter. La propre méthode get du dict fonctionne 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 dict n'est pas limitée, l'utilisation d'un tas sera finalement plus rapide qu'un tri complet.

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

Pour plus d'informations, consultez la documentation heapq .

95
A. Coady

Vous pouvez utiliser collections.Counter 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}
38
Akavall

Essaye ça:

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

Pour Python 3

import operator
dict(sorted(A.items(), key=operator.itemgetter(1), reverse=True)[:5])
1
Malinda