Supposons que j'ai un dict.
data = {1:'b', 2:'a'}
Et je veux trier les données par 'b' et 'a' pour obtenir le résultat
'a','b'
Comment je fais ça?
Des idées?
Pour obtenir les valeurs, utilisez
sorted(data.values())
Pour obtenir les clés correspondantes, utilisez une fonction key
sorted(data, key=data.get)
Pour obtenir une liste de tuples commandés par valeur
sorted(data.items(), key=lambda x:x[1])
Connexes: voir la discussion ici: Les dictionnaires sont classés en Python 3.6+
Si vous voulez réellement trier le dictionnaire au lieu d’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']
De votre commentaire à la réponse gnibbler, je dirais que vous voulez une liste de paires clé-valeur triées par valeur:
sorted(data.items(), key=lambda x:x[1])
Merci pour toutes les réponses . Vous êtes tous mes héros ;-)
A la fin, quelque chose comme ça:
d = sorted(data, key = d.get)
for id in d:
text = data[id]
Trier les valeurs:
sorted(data.values())
résultats
['a','b']
Je pense aussi qu'il est important de noter que le type d'objet Python dict
est une table de hachage ( à ce sujet ici ), et ne peut donc pas être trié sans convertir ses clés/valeurs en listes. Ce que cela permet, c’est dict
récupération d’éléments en temps constant O(1)
, quels que soient la taille/le nombre d’éléments dans un dictionnaire.
Cela dit, une fois que vous triez ses clés - sorted(data.keys())
ou ses valeurs - sorted(data.values())
, vous pouvez ensuite utiliser cette liste pour accéder aux clés/valeurs dans des modèles de conception tels que ceux-ci:
for sortedKey in sorted(dictionary):
print dictionary[sortedKeY] # gives the values sorted by key
for sortedValue in sorted(dictionary.values()):
print sortedValue # gives the values sorted by value
J'espère que cela t'aides.
Dans votre commentaire en réponse à John, vous proposez que vous souhaitiez les clés et les valeurs du dictionnaire, pas seulement les valeurs.
PEP 256 suggère ceci pour le tri d'un dictionnaire par valeurs.
import operator
sorted(d.iteritems(), key=operator.itemgetter(1))
Si vous voulez un ordre décroissant, faites ceci
sorted(d.iteritems(), key=itemgetter(1), reverse=True)
pas de méthode lambda
# sort dictionary by value
d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'}
def getkeybyvalue(d,i):
for k, v in d.items():
if v == i:
return (k)
sortvaluelist = sorted(d.values())
sortresult ={}
for i1 in sortvaluelist:
key = getkeybyvalue(d,i1)
sortresult[key] = i1
print ('=====sort by value=====')
print (sortresult)
print ('=======================')
Vous pouvez créer une liste triée à partir de valeurs et reconstruire le dictionnaire:
myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"}
newDictionary={}
sortedList=sorted(myDictionary.values())
for sortedKey in sortedList:
for key, value in myDictionary.items():
if value==sortedKey:
newDictionary[key]=value
Sortie: newDictionary = {'one': '1', 'two': '2', '1four': '4', 'five': '5'}