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

Lorsque vous travaillez avec un dictionnaire en Python, vous devrez parfois trier son contenu, par clé ou par valeur. Comme un dictionnaire Python est un mappage clé-valeur, vous allez créer un nouveau dictionnaire dont les clés ou les valeurs sont triées selon les besoins.

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

Python Dictionary Basics, Revisited

Qu'est-ce qu'un dictionnaire Python ?

Dictionary est une structure de données intégrée à Python. Il stocke les articles comme paires clé-valeur. Vous pouvez utiliser les touches pour rechercher les valeurs correspondantes. Comme les clés identifient de manière unique les valeurs, il ne doit y avoir aucune répétition de clés.

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

py_dict["Learn"]
# Output: True

Fonctionnellement, un dictionnaire est similaire à une carte de hachage. Par conséquent, ce n'est pas nécessairement 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.

Classement des éléments dans un dictionnaire

Dans les versions antérieures de Python, vous deviez utiliser un OrdonnéDict pour conserver l'ordre des touches. Cependant, à partir de Python 3.7, vous pouvez accéder aux éléments du même ordre dans lequel vous les ajoutez au dictionnaire. 

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

⚙️ Notes: Vous devez disposer de Python 3.7 ou version ultérieure pour que le code de ce didacticiel fonctionne comme prévu. Vous pouvez télécharger le dernière version de Python, ou exécutez les exemples dans Éditeur Python en ligne Geekflare.

How to Sort a Python Dictionary by Key

Regardez l'image suivante de la carte des desserts dans 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 éléments sous forme de clés et leurs prix sous forme de valeurs.

Continuons et créons le dictionnaire desserts, comme indiqué ci-dessous.

desserts = {
    "Ice cream":10,
    "Brownies":12,
    "Cheesecake":3,
    "Swiss roll":5,
    "Cookies":4,
    "Cup cake":2
}

Ensuite, créons un dictionnaire sorted_desserts, où les desserts sont classés par ordre alphabétique. Dans la version originale desserts dictionnaire, 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 du dictionnaire intégré .keys() pour obtenir une liste de toutes les clés du dictionnaire.

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

keys = desserts.keys()
print(keys)

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

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

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

sorted_keys = sorted(keys)
print(sorted_keys)

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

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

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

print(sorted_desserts)

# Output
{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Développons le bloc de code ci-dessus :

  • Initialiser sorted_desserts être un dictionnaire Python vide.
  • Parcourez la liste des clés sorted_keys.
  • Pour chaque clé dans sorted_keys, ajoutez une entrée à sorted_desserts en recherchant la valeur correspondante dans desserts dictionnaire.

En utilisant l' for une boucle comme celle-ci est considérée comme détaillée. En Python, il existe une alternative plus concise utilisant la compréhension du dictionnaire.

Compréhension du dictionnaire en Python

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

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

# 1. when you have both keys and values in two lists: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. when you have the keys, and can look up the values
new_dict = {key:value for key in <iterable>}

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

Dans cet exemple:

  • itérable: la liste sorted_keys
  • key: la clé à laquelle nous accédons en bouclant à travers sorted_keys
  • VALORISONS: rechercher la valeur correspondant à la clé dans le dictionnaire des desserts, desserts[key]

En mettant tout cela ensemble, nous avons 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, 
'Ice cream': 10, 'Swiss roll': 5}

À partir de la sortie ci-dessus, les desserts sont classés par ordre alphabétique dans le sorted_desserts dictionnaire.

How to Sort a Python Dictionary by Value

Ensuite, nous apprendrons à trier un dictionnaire Python par ses valeurs.

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

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

desserts.items()

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

Chacun des éléments est un tuple en soi. Ainsi, vous pouvez également indexer dans 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]}")

# Output
key:Ice cream,value:10
key:Brownies,value:12
key:Cheesecake,value:3
key:Swiss roll,value:5
key:Cookies,value:4
key:Cup cake,value:2

Comme nous aimerions trier par 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 le sorted() fonction avec l'option key paramètre. key peut être n'importe quelle fonction Python, une fonction intégrée, une fonction définie par l'utilisateur ou même un fonction lambda.

Notes: lambda args: expression est la syntaxe pour définir les fonctions lambda en Python.

Dans cet exemple de tri des desserts par prix, nous avons accès aux éléments du dictionnaire (couples clé-valeur). Nous fixerons key = lambda item:item[1] car nous aimerions trier par la valeur (prix).

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

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

{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Vous pouvez également réécrire en utilisant compréhension du dictionnaire, comme discuté plus tôt.

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

print(sorted_desserts)

# Output
{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

In sorted_desserts, Cup Cake au prix de 2 $ est le premier article et Brownies au prix de 12 $ est le dernier article.

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

Si vous souhaitez trier les prix par ordre décroissant, vous pouvez définir le paramètre inverse facultatif sur True, comme expliqué ci-dessous.

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

# Output
{'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 
'Cheesecake': 3, 'Cup cake': 2}

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

Conclusion 👩🏽‍💻

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

  • Un dictionnaire Python stocke les données dans des paires clé-valeur ; les clés doivent toutes être uniques.
  • Dans le processus de tri d'un dictionnaire par clé ou valeur, nous créons un nouveau dictionnaire qui est trié selon les besoins.
  • Vous pouvez utiliser les méthodes de dictionnaire intégrées, .clés() et .éléments() pour récupérer toutes les clés et les paires clé-valeur, respectivement.
  • Vous pouvez utiliser le trié () fonction avec les paramètres facultatifs key et inverser pour obtenir le tri souhaité.

Maintenant que vous avez appris à trier un dictionnaire Python, apprenez à trier les listes Python. Bon codage !🎉