Dans ce tutoriel, vous apprendrez à trier un dictionnaire Python par sa clé ou sa valeur.

Lorsque vous travaillez avec un dictionnaire en Python, il arrive que vous ayez besoin de trier son contenu par clé ou par valeur. Comme un dictionnaire Python est un mappage clé-valeur, vous créerez un nouveau dictionnaire dont les clés ou les valeurs seront triées selon vos besoins.

Dans ce tutoriel, nous commencerons par revoir les bases du dictionnaire Python. Nous apprendrons ensuite à créer un nouveau dictionnaire dont le contenu est trié par clé ou par valeur, selon vos besoins.

Les bases du dictionnaire Python, revisitées

Le dictionnaire est une structure de données intégrée à Python. Il stocke les éléments sous forme de paires clé-valeur. Vous pouvez utiliser les clés pour rechercher les valeurs correspondantes. Comme les clés identifient les valeurs de manière unique, il ne doit pas y avoir de répétition des clés.

py_dict = {"Python" : "cool !", "Learn":True}
py_dict["Python"]
# Sortie : cool !

py_dict["Learn"]
# Sortie : Vrai

D’un point de vue fonctionnel, un dictionnaire est similaire à une carte de hachage. Il ne s’agit donc pas nécessairement d’une structure de données ordonnée. Vous pouvez accéder au contenu d’un dictionnaire dans n’importe quel ordre, tant que vous connaissez les clés.

Ordre des éléments d’un dictionnaire

Dans les versions antérieures de Python, vous deviez utiliser un OrderedDict pour préserver l’ordre des clés. Cependant, depuis Python 3.7, vous pouvez accéder aux éléments dans l ordre dans lequel vous les avez ajoutés au dictionnaire.

Maintenant que vous avez appris les bases des dictionnaires Python, apprenons à créer des copies triées du dictionnaire.

⚙️ Note: Vous devez disposer de Python 3.7 ou d’une version ultérieure pour que le code de ce tutoriel fonctionne correctement. Vous pouvez télécharger la dernière version de Python.

Comment trier un dictionnaire Python par clé

Regardez l’image suivante de la carte des desserts d’un café. Il y a deux colonnes correspondant aux articles du menu et à leurs prix respectifs.

python-dictionary-from-data

Vous pouvez représenter cela sous la forme d’un dictionnaire Python en collectant les noms des produits comme clés et leurs prix comme valeurs.

Créons le dictionnaire desserts, comme indiqué ci-dessous.

desserts = {
    "Crème glacée":10,
    "Brownies":12,
    "Cheesecake":3,
    "Rouleau suisse":5,
    "Biscuits":4,
    "Cup cake":2
}

Ensuite, créons un dictionnaire sorted_desserts, dans lequel les desserts sont classés par ordre alphabétique. Dans le dictionnaire desserts original, les noms des desserts sont les clés. Vous devez donc trier ces clés par ordre alphabétique pour créer un nouveau dictionnaire.

Comment accéder aux clés d’un dictionnaire Python ?

Pour ce faire, nous allons d’abord récupérer les clés du dictionnaire, puis les trier par ordre alphabétique.

En Python, vous pouvez utiliser la méthode de dictionnaire intégrée .keys() pour obtenir une liste de toutes les clés du dictionnaire.

Appelons la méthode .keys() sur le dictionnaire des desserts pour récupérer les clés, comme indiqué ci-dessous.

keys = desserts.keys()
print(keys)

#Sortie
['Glace', 'Brownies', 'Cheesecake', 'Rouleau suisse', 'Biscuits', 
'Cup cake']

L’appel de la fonction intégrée sorted() de Python avec une liste comme argument renvoie une nouvelle liste triée.

Ensuite, appelons la fonction sorted() avec la liste keys comme argument et stockons la liste triée dans la variable sorted_keys.

clés_triées = triées(clés)
print(clés_triées)

# Sortie
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']

Maintenant que les clés sont triées par ordre alphabétique, nous pouvons rechercher les valeurs correspondant aux clés dans sorted_keys dans le dictionnaire desserts, comme indiqué ci-dessous.

sorted_desserts = {}
pour clé dans sorted_keys :
  sorted_desserts[key] = desserts[key]

print(sorted_desserts)

# Sortie
{'Brownies' : 12, 'Cheesecake' : 3, "Cookies" : 4, "Cup cake" : 2, 
glace" : 2, "Crème glacée" : 10, "Rouleau suisse" : 10, etc : 10, "Rouleau suisse" : 5}

Développons le bloc de code ci-dessus :

  • Initialisez sorted_desserts comme un dictionnaire Python vide.
  • Parcourez en boucle la liste des clés sorted_keys.
  • Pour chaque clé de sorted_keys, ajoutez une entrée à sorted_desserts en recherchant la valeur correspondante dans le dictionnaire desserts.

L’utilisation de la boucle for de cette manière est considérée comme verbeuse. En Python, il existe une alternative plus concise qui consiste à utiliser la compréhension du dictionnaire.

Compréhension du dictionnaire en Python

Python prend en charge l’utilisation de la compréhension du dictionnaire, similaire à la compréhension de la liste. La compréhension du dictionnaire vous permet de créer un nouveau dictionnaire Python en une seule ligne de code.

▶️ Voici la construction générale pour utiliser la compréhension du dictionnaire en Python.

# 1. lorsque vous avez des clés et des valeurs dans deux listes : list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. lorsque vous avez les clés et que vous pouvez rechercher les valeurs
new_dict = {key:value for key in }

Utilisons la deuxième construction dans la cellule ci-dessus : new_dict = {key:value for key in <iterable>}</iterable> pour créer un dictionnaire sorted_desserts.

Dans cet exemple :

  • iterable: la liste sorted_keys
  • clé: la clé à laquelle nous accédons en parcourant la liste sorted_keys
  • value: recherche la valeur correspondant à la clé dans le dictionnaire desserts, desserts<x><x><x>[key]</x></x></x>

En rassemblant tous ces éléments, nous obtenons l’expression pour la compréhension du dictionnaire, comme indiqué ci-dessous.

sorted_desserts = {key:desserts[key] for key in sorted_keys}
print(sorted_desserts)

{'Brownies' : 12, 'Cheesecake' : 3, "Cookies" : 4, "Cup cake" : 2, 
glace" : 2, "Glace" : 10, "Rouleau suisse" : 10 10, "Rouleau suisse" : 5}

D’après la sortie ci-dessus, les desserts sont classés par ordre alphabétique dans le dictionnaire sorted_desserts.

Comment trier un dictionnaire Python par valeur

Nous allons maintenant apprendre à trier un dictionnaire Python en fonction de ses valeurs.

Dans le dictionnaire desserts, les valeurs correspondent aux prix des desserts. Vous pouvez vouloir trier le dictionnaire par prix, soit par ordre croissant, soit par ordre décroissant.

▶️ Vous pouvez utiliser la méthode de dictionnaire intégrée .items() pour obtenir toutes les paires clé-valeur. Chaque tuple est une paire clé-valeur.

desserts.items()

dict_items([('Glace', 10), ('Brownies', 12), ('Cheesecake', 3), 
('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])

Chaque élément est un tuple en soi. Vous pouvez donc également indexer chaque paire clé-valeur pour accéder aux clés et aux valeurs individuellement.

dict_items = desserts.items()
for item in dict_items :
  print(f"key:{item[0]},value:{item[1]}")

# Sortie
clé:Glace,valeur:10
clé:Brownies,valeur:12
clé:Cheesecake,valeur:3
clé:Rouleau suisse,valeur:5
clé:Cookies,valeur:4
clé:Cup cake,valeur:2

Comme nous souhaitons trier les valeurs, nous utiliserons la méthode ci-dessus pour obtenir la valeur à l’index 1 dans la paire clé-valeur.

Comment trier les valeurs d’un dictionnaire Python par ordre croissant ?

Cette fois, nous utiliserons la fonction sorted() avec le paramètre optionnel key. key peut être n’importe quelle fonction Python, une fonction intégrée, une fonction définie par l’utilisateur ou même une fonction lambda.

Remarque: lambda args : expression est la syntaxe de définition des fonctions lambda en Python.

Dans cet exemple de tri des desserts par prix, nous avons accès aux éléments du dictionnaire (paires clé-valeur). Nous définirons key = lambda item:item<x><x><x><x>[1]</x></x></x></x> car nous souhaitons trier par la valeur (prix).

Comme la fonction sorted() renvoie une liste par défaut, vous devez la convertir explicitement en un dict, comme indiqué ci-dessous.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1]))
print(desserts_sortis)

{'Cup cake' : 2, 'Cheesecake' : 3, 'Cookies' : 4, 'Rouleau suisse' : 5, 
'Glace' : 10, 'Brownies' : 12} : 10, "Brownies" : 12}

Vous pouvez également réécrire en utilisant la compréhension du dictionnaire, comme nous l’avons vu précédemment.

sorted_desserts = {key:value for key, value in sorted(desserts.items(), 
key=lambda item:item[1])}

print(sorted_desserts)

# Sortie
{'Cup cake' : 2, 'Cheesecake' : 3, 'Cookies' : 4, 'Rouleau suisse' : 5, 
'Crème glacée' : 10, 'Brownies' : 12}

Dans sorted_desserts, Cup Cake au prix de 2 $ est le premier élément et Brownies au prix de 12 $ est le dernier élément.

Comment trier les valeurs d’un dictionnaire Python par ordre décroissant ?

Si vous souhaitez trier les prix par ordre décroissant, vous pouvez attribuer la valeur True au paramètre optionnel reverse, comme expliqué ci-dessous.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], 
reverse=True))
print(desserts_sortis)

# Sortie
{'Brownies' : 12, 'Crème glacée' : 10, 'Rouleau suisse' : 5, 'Cookies' : 4, 
'Cheesecake' : 3, 'Cup cake' : 2}

Maintenant, sorted_desserts a été trié dans l’ordre décroissant des prix, en commençant par le dessert le plus cher, Brownies, qui coûte 12 $.

Conclusion

Résumons rapidement tout ce que nous avons appris dans ce tutoriel.

  • Un dictionnaire Python stocke des données sous forme de paires clé-valeur ; les clés doivent toutes être uniques.
  • Pour trier un dictionnaire par clé ou par valeur, nous créons un nouveau dictionnaire qui est trié en fonction des besoins.
  • Vous pouvez utiliser les méthodes intégrées du dictionnaire, .keys() et .items() pour récupérer toutes les clés et les paires clé-valeur, respectivement.
  • Vous pouvez utiliser la fonction sorted() avec les paramètres facultatifs key et reverse pour obtenir le tri souhaité.