Python >> Tutoriel Python >  >> Python

Comment trier un dictionnaire en Python par clé ?

Pour trier un dictionnaire par clé en Python, utilisez l'expression de compréhension du dictionnaire {key:dict[key] for key in sorted(dict )} pour créer un nouveau dictionnaire avec des clés dans un ordre trié. Vous parcourez toutes les clés dans un ordre trié, obtenez leurs valeurs associées avec rank[key] , et placez-les dans un nouveau dictionnaire. Les dictionnaires Python préservent l'ordre, même si la spécification ne l'exige pas, car les dictionnaires sont des structures de données non ordonnées.

Problème : Étant donné un dictionnaire; comment le trier par clés ?

Exemple : L'exemple suivant montre un dictionnaire nommé rank qui stocke les noms des individus comme clés tandis que leurs rangs correspondants représentent les valeurs. Nous utiliserons cet exemple comme référence lors de la discussion des solutions.

rank = {
  'Bob': 2,
  'Alice': 4,
  'Sharon': 5,
  'Dwyane': 1,
  'John': 3
}

# Some Procedure to Sort the Dictionary by its Keys

Sortie  :Voici la sortie souhaitée.

{'Alice': 4, 'Bob': 2, 'Dwyane': 1, 'John': 3, 'Sharon': 5}

Méthode 1 :Trier un dictionnaire par clé et renvoyer une liste de clés

Solution 1 :Si vous êtes juste intéressé par les clés, vous pouvez utiliser le sorted(dict) fonction pour créer une liste triée de clés de dictionnaire.

rank = {
  'Bob': 2,
  'Alice': 4,
  'Sharon': 5,
  'Dwyane': 1,
  'John': 3
}

sorted_ranks = sorted(rank)
print(sorted_ranks)
# ['Alice', 'Bob', 'Dwyane', 'John', 'Sharon']

Méthode 2 :Trier un dictionnaire par clé et renvoyer un dictionnaire ordonné

Solution 2 : Si vous souhaitez réellement obtenir un dictionnaire trié, vous pouvez utiliser la compréhension du dictionnaire.

rank = {
  'Bob': 2,
  'Alice': 4,
  'Sharon': 5,
  'Dwyane': 1,
  'John': 3
}

sorted_ranks = {key:rank[key] for key in sorted(rank)}
print(sorted_ranks)
# {'Alice': 4, 'Bob': 2, 'Dwyane': 1, 'John': 3, 'Sharon': 5}

Vous parcourez toutes les clés dans un ordre trié, obtenez leurs valeurs associées avec rank[key] , et placez-les dans un nouveau dictionnaire. À ce jour, les dictionnaires Python conservent toujours l'ordre, même s'ils n'ont pas à le faire du point de vue des spécifications car, techniquement, les dictionnaires sont des structures de données non ordonnées.

Vous avez maintenant appris à trier un dictionnaire par clé . Mais comment le trier par valeur ? Découvrons !

Vidéo :comment trier un dictionnaire par valeur en Python ?

En savoir plus : Vous pouvez consulter notre article complet pour plusieurs méthodes de tri d'un dictionnaire (par valeur) en Python.

Puzzle interactif – Trier une application de dictionnaire

# mg per 100g
omega3_table = {
    "Salmon" : 2260,
    "Hering" : 1729,
    "Sardines" : 1480,
    "Flaxseeds" : 53400,
    "Eggs" : 400
}

y = sorted(omega3_table, key=lambda x : omega3_table[x])
print(y[-1])

Réflexion :Quel est le résultat de ce puzzle ?

Vous pouvez résoudre le puzzle dans notre application interactive Finxter dans votre navigateur :

Dans ce puzzle, nous montrons comment trier un dictionnaire non pas après les clés mais après les valeurs. Pour rappel, un dictionnaire stocke des paires (clé, valeur). Dans notre exemple, les clés sont des chaînes avec les noms de cinq aliments différents tels que « Oeufs ». Le dictionnaire associe chaque nom d'aliment à une valeur numérique qui décrit la quantité d'acides gras oméga 3 sains pour 100 g.

Comment trier les aliments (clés) dans le dictionnaire en fonction de la quantité d'oméga 3 qu'ils contiennent (valeur) ? Pour ce faire, nous utilisons la fonction triée intégrée de Python. Pourtant, appeler sorted(omega3_table) conduit à un résultat étrange. Lors de l'application de la fonction de tri par défaut à un dictionnaire, le tri est effectué en fonction des clés, et non des valeurs.

Pour résoudre ce problème, nous spécifions le paramètre clé de la fonction triée. Le paramètre clé attend une fonction qui attribue une valeur à chaque élément de la séquence. Cette valeur est ensuite utilisée pour trier la séquence. Dans notre exemple, nous utilisons la valeur du dictionnaire de la clé respective. Nous attribuons la valeur omega3_table[x] à chaque élément de séquence x.

Python trie par défaut dans un ordre croissant. Ainsi, le dernier élément de la séquence triée (avec un maximum d'oméga 3) est l'aliment 'Flaxseeds' . À emporter :mangez une cuillère à soupe de graines de lin par jour ! Ils font partie des aliments les plus sains de notre planète.


Post précédent