Comment trier un dictionnaire par valeur en Python

Découvrez comment trier un dictionnaire Python par ses valeurs. Découvrez le tri à l'aide de sorted(), les lambdas de clés personnalisées et la création de structures de dict ordonnées.

Essayez cette solution dans l'éditeur

Aperçu

Bien que les dictionnaires soient principalement conçus pour des opérations de recherche rapide à l'aide de clés uniques, vous devrez souvent trier les éléments du dictionnaire en fonction de leurs valeurs. Par exemple, trier les étudiants en fonction de leurs notes d'examen, répertorier les produits du moins cher au plus cher ou classer le nombre de mots par fréquence.

En Python, vous ne pouvez pas trier directement un dictionnaire sur place car les structures de dictionnaire standard ne prennent pas en charge les méthodes de classement telles que les listes. Au lieu de cela, l'approche standard consiste à récupérer les éléments du dictionnaire sous forme de tuples à l'aide de la méthode `.items()`, à trier ces tuples à l'aide de la fonction intégrée `sorted()` avec une clé de tri personnalisée, puis à reconstruire le dictionnaire à partir des éléments triés.

La clé de tri est généralement une fonction lambda qui renvoie le deuxième élément du tuple (la valeur du dictionnaire) : `key=lambda item: item[1]`. DepuisPython 3.7+, les dictionnaires standards conservent l'ordre d'insertion. La refonte de la liste triée de tuples dans un dictionnaire à l'aide du constructeur `dict()` renvoie un dictionnaire propre et trié, prêt pour l'itération.

Sortie de code et d'exécution

Ce script montre le tri d'un dictionnaire de résultats de tests par valeurs, par ordre croissant et décroissant, à l'aide des fonctions lambda.

sort_dict_values.py
Essayez dans l'éditeur
scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)

# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)

# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)

# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)
Sortie terminale
Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}

Mise en œuvre étape par étape

  • Appelez my_dict.items() pour récupérer les paires clé-valeur sous forme de liste de tuples.
  • Transmettez les éléments du dictionnaire à la fonction sorted().
  • Spécifiez key=lambda item: item[1] pour demander à la fonction sorted() de trier en fonction de la valeur (deuxième élément de chaque tuple).
  • Passez reverse=True comme argument facultatif pour trier les éléments par ordre décroissant.
  • Reconstruisez le dictionnaire trié en passant la liste triée des tuples au constructeur dict().

Foire aux questions

Que signifie key=lambda item: item[1] ?

La fonction sorted() transmet chaque élément de la séquence d'éléments (un tuple de (clé, valeur)) à la fonction lambda. item[1] extrait le composant valeur, indiquant à Python de trier les tuples par valeur.

Le tri d’un dictionnaire affecte-t-il sa vitesse de recherche des clés ?

Non, les recherches de clés restent d'une complexité temporelle moyenne de O(1), car le tri ne modifie que la séquence d'itérations, pas la structure de la table de hachage sous-jacente.

Sujets connexes

Ressources Python recommandées

Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.