94 votes

trier un dict par valeur en python

Supposons que j'ai un dictateur.

data = {1:'b', 2:'a'}

Et je veux trier les données par 'b' et 'a' pour obtenir le résultat suivant

'a','b'

Comment je fais ça ?
Des idées ?

182voto

gnibbler Points 103484

Pour obtenir les valeurs, utilisez

sorted(data.values())

Pour obtenir les clés correspondantes, utilisez un key fonction

sorted(data, key=data.get)

Pour obtenir une liste de tuples ordonnés par valeur

sorted(data.items(), key=lambda x:x[1])

Voir la discussion ici : Les dictionnaires sont ordonnés dans Python 3.6+.

47voto

jamylak Points 38094

Si vous voulez réellement trier le dictionnaire au lieu de simplement obtenir une liste triée, utilisez collections.OrderedDict

>>> from collections import OrderedDict
>>> from operator import itemgetter
>>> data = {1: 'b', 2: 'a'}
>>> d = OrderedDict(sorted(data.items(), key=itemgetter(1)))
>>> d
OrderedDict([(2, 'a'), (1, 'b')])
>>> d.values()
['a', 'b']

18voto

njzk2 Points 17085

D'après votre commentaire à la réponse de gnibbler, je dirais que vous voulez une liste de paires clé-valeur triées par valeur :

sorted(data.items(), key=lambda x:x[1])

9voto

eumiro Points 56644

Trier les valeurs :

sorted(data.values())

renvoie à

['a','b']

9voto

kingRauk Points 153

Merci pour toutes les réponses. Vous êtes tous mes héros ;-)

J'ai fini par faire quelque chose comme ça :

d = sorted(data, key = data.get)

for key in d:
    text = data[key]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X