Python >> Tutoriel Python >  >> Python

Comment trier un dictionnaire par valeur en Python ?

Résumé : Utilisez l'une des méthodes suivantes pour trier un dictionnaire par valeur :

  1. Utiliser le sorted(dict1, key=dict1.get) Méthode.
  2. Utiliser la compréhension du dictionnaire Et Lambda Avec trié() Méthode.
  3. Utiliser OrderedDict (Pour les anciennes versions de Python).
  4. Utiliser itemgetter() avec trié() Méthode.
  5. Utiliser le compteur sous-classe.

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

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 Values

Sortie :

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

Avant de plonger dans les solutions, voici quelques Points à retenir à propos des dictionnaires :

  • Depuis Python 3.7, les dictionnaires Python sont ordonnés (l'insertion est également ordonnée). Cela signifie que l'ordre dans lequel les clés sont insérées dans les dictionnaires est conservé.
  • Dans un scénario normal de tri des dictionnaires, produit un dictionnaire trié en fonction de ses clés.

Pour avoir un meilleur aperçu des dictionnaires Python, veuillez suivre notre tutoriel de blog sur les dictionnaires ici . Cependant, le but de cet article est uniquement de vous guider à travers les nombreuses méthodes pour trier un dictionnaire en fonction des valeurs au lieu des clés. Alors sans plus tarder, plongeons-nous dans les solutions.

➤ Voici un aperçu rapide de toutes les méthodes utilisées dans cet article. Veuillez suivre le diaporama ci-dessous :

Méthode 1 :Utilisation de sorted(dict1, key=dict1.get) Méthode

Le sorted() method est une méthode intégrée à Python qui est utilisée pour trier les éléments d'un itérable dans un ordre spécifique (croissant ou descendant ). Après avoir trié les éléments, il renvoie la séquence triée, sous la forme d'une liste triée.

Syntaxe :

Afin de trier le dictionnaire en utilisant les valeurs, nous pouvons tirer parti de la puissance du sorted() fonction. Pour trier le dictionnaire en fonction de la valeur, nous pouvons utiliser le get() et passez-la au key argument du sorted() fonction.

Examinons le code suivant pour comprendre l'utilisation de sorted fonction afin de résoudre notre problème :

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

for w in sorted(rank, key=rank.get):
    print(w, rank[w])

Sortie :

Dwyane 1
Bob 2
John 3
Alice 4
Sharon 5

Afin de trier le dictionnaire en utilisant ses valeurs dans l'ordre inverse, nous devons spécifier le reverse argument comme true , c'est-à-dire

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

for w in sorted(rank, key=rank.get, reverse=True):
    print(w, rank[w])

Sortie :

Sharon 5
Alice 4
John 3
Bob 2
Dwyane 1

Méthode 2 :Utilisation de la compréhension du dictionnaire Et Lambda Avec trié() Méthode

Si vous utilisez Python 3.6 et supérieur, notre problème peut être résolu en une seule ligne en utilisant une compréhension de dictionnaire et une fonction lambda dans le sorted méthode. C'est une solution efficace et concise pour trier les dictionnaires en fonction de leurs valeurs.

⦿ Compréhension du dictionnaire est un moyen concis et économe en mémoire pour créer et initialiser des dictionnaires dans une ligne de code Python. Il se compose de deux parties :l'expression et le contexte. L'expression définit comment mapper les clés aux valeurs. Le contexte boucle sur un itérable à l'aide d'une boucle for sur une seule ligne et définit les paires (clé, valeur) à inclure dans le nouveau dictionnaire. Pour en savoir plus sur les compréhensions de dictionnaires en python, consultez notre tutoriel de blog ici.

Maintenant, regardons le code suivant donné ci-dessous qui explique l'utilisation des compréhensions du dictionnaire pour résoudre notre problème en un seul mensonge de code.

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

print({k: v for k, v in sorted(rank.items(), key=lambda item: item[1])})

Sortie :

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

Méthode 3 :Utilisation de OrderedDict (Pour les anciennes versions de Python)

Les dictionnaires sont généralement non ordonnés pour les versions antérieures à Python 3.7, il n'est donc pas possible de trier un dictionnaire directement. Par conséquent, pour surmonter cette contrainte, nous devons utiliser le OrderedDict sous-classe.

⦿ Un OrderedDict est une sous-classe de dictionnaire qui préserve l'ordre dans lequel les valeurs-clés sont insérées dans un dictionnaire. Il est inclus dans le collections module en Python.

Voyons comment nous pouvons utiliser OrderedDict pour ordonner les dictionnaires dans les versions antérieures de Python et les trier.

from collections import OrderedDict
rank = {
  'Bob': 2,
  'Alice': 4,
  'Sharon': 5,
  'Dwyane': 1,
  'John': 3
}
a = OrderedDict(sorted(rank.items(), key=lambda x: x[1]))
for key,value in a.items():
  print(key, value)

Sortie :

('Dwyane', 1)
('Bob', 2)
('John', 3)
('Alice', 4)
('Sharon', 5)

Méthode 4 :Utilisation de itemgetter() Avec la méthode sorted()

⦿ itemgetter() est une fonction intégrée du operator module qui construit un appelable qui accepte un itérable comme une liste, un tuple, un ensemble, etc. en entrée et récupère le n ième élément en dehors.

Exemple :

from operator import itemgetter

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

a = sorted(rank.items(), key=itemgetter(1))
print(dict(a))

Sortie :

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

Dans l'exemple ci-dessus a stocke une liste de tuples. Nous l'avons donc converti en dictionary explicitement, lors de l'impression.

Méthode 5 :Utilisation du compteur

Compteur est une sous-classe de dictionnaire utilisée pour compter les objets hachables. Puisque les valeurs que nous utilisons sont des entiers, nous pouvons utiliser le Counter classe pour les trier. Le Counter la classe doit être importée depuis le module de collections.

Avis de non-responsabilité : Il s'agit d'une solution de contournement pour le problème en cours et peut ne pas convenir à toutes les situations. Puisque, dans notre cas, les valeurs du dictionnaire sont des nombres entiers, le Compteur la sous-classe correspond à une solution à notre problème. Considérez cela comme une astuce bonus ! ?

from collections import Counter

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

count = dict(Counter(rank).most_common())
print(count)

Sortie :

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

⦿ Dans le programme ci-dessus la méthode most_common() a été utilisé pour renvoyer tous les éléments du compteur.

Conclusion

En cela, nous avons appris les méthodes suivantes pour trier un dictionnaire par valeurs en Python :

  • Utiliser le sorted(dict1, key=dict1.get) Méthode.
  • Utiliser la compréhension du dictionnaire Et Lambda Avec trié() Méthode.
  • Utiliser OrderedDict (Pour les anciennes versions de Python).
  • Utiliser itemgetter() avec trié() Méthode.
  • Utiliser le compteur sous-classe.

J'espère qu'après avoir lu cet article, vous pourrez facilement trier les dictionnaires par leurs valeurs. Veuillez vous abonner et rester à l'écoute pour des articles plus intéressants à l'avenir.