Cum să sortați un dicționar după valoare în Python

Introducere

Un dicționar în Python este o colecție de articole care stochează date ca perechi cheie-valoare. În Python 3.7 și versiunile ulterioare, dicționarele sunt sortate după ordinea inserării elementului. În versiunile anterioare, acestea erau neordonate.

În acest articol, vom arunca o privire asupra modului în care putem sorta un dicționar pe baza valorilor pe care le conțin.

Sortare dicționar folosind a pentru Buclă

Putem sorta un dicționar cu ajutorul unui for buclă. În primul rând, folosim sorted() funcție de ordonare a valorilor dicționarului. Apoi parcurgem valorile sortate, găsind cheile pentru fiecare valoare. Adăugăm aceste perechi cheie-valoare în ordinea sortată într-un nou dicționar.

Notă: Sortarea nu vă permite să reordonați dicționarul în loc. Scriem perechile ordonate într-un dicționar complet nou, gol.

dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) 
sorted_dict = {}

for i in sorted_values:
    for k in dict1.keys():
        if dict1[k] == i:
            sorted_dict[k] = dict1[k]

print(sorted_dict)

Dacă rulați acest lucru cu interpretul Python, veți vedea:

{1: 1, 3: 4, 2: 9}

Acum că am văzut cum să sortăm cu bucle, să ne uităm la o alternativă mai populară care utilizează sorted() Funcția.

Sortare dicționar folosind sortat() Funcţie

Am folosit anterior sorted() funcția de sortare a valorilor unui tablou. Când sortăm un dicționar, putem transmite încă un argument la sorted() functioneaza astfel: sorted(dict1, key=dict1.get).

Aici, key este o funcție care este apelată pe fiecare element înainte ca valorile să fie comparate pentru sortare. The get() metoda pe obiectele dicționarului returnează valoarea cheii unui dicționar.

sorted(dict1, key=dict1.get) expresie va returna lista de chei ale căror valori sunt sortate în ordine. De acolo, putem crea un nou dicționar sortat:

dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)  

for w in sorted_keys:
    sorted_dict[w] = dict1[w]

print(sorted_dict) 

Utilizarea sorted() funcția a redus cantitatea de cod pe care a trebuit să o scriem când folosim for bucle. Cu toate acestea, putem combina în continuare sorted() funcţionează cu itemgetter() funcția pentru o soluție mai succintă la sortarea dicționarelor după valori.

Sortare dicționar folosind operator Modul și itemgetter()

operator modulul include itemgetter() funcţie. Această funcție returnează un obiect apelabil care returnează un articol dintr-un obiect.

De exemplu, să folosim itemgetter() pentru a crea un obiect apelabil care returnează valoarea oricărui dicționar cu o cheie care este 2:

import operator

dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)

print(get_item_with_key_2(dict1))  

Fiecare dicționar are acces la items() metodă. Această funcție returnează perechile cheie-valoare ale unui dicționar ca o listă de tupluri. Putem sorta lista de tupluri folosind itemgetter() funcția de a trage a doua valoare a tuplului, adică valoarea cheilor din dicționar.

După ce este sortat, putem crea un dicționar pe baza acestor valori:

import operator

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict) 

Cu mult mai puțin efort, avem un dicționar sortat după valori!

Ca key argument acceptă orice funcție, putem folosi funcții lambda pentru a returna valorile de dicționar, astfel încât acestea să poată fi sortate. Să vedem cum.

Sortare dicționar folosind o funcție Lambda

Funcțiile Lambda sunt funcții anonime sau fără nume în Python. Putem folosi funcții lambda pentru a obține valoarea unui element de dicționar fără a fi nevoie să importam operator modul pentru itemgetter(). Dacă doriți să aflați mai multe despre lambda, puteți citi despre ele în ghidul nostru pentru Funcții Lambda în Python.

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

Să sortăm un dicționar după valori folosind o funcție lambda din key argument de sorted():

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict)  

Rețineți că metodele pe care le-am discutat până acum funcționează numai cu Python 3.7 și versiuni ulterioare. Să vedem ce putem face pentru versiunile anterioare de Python.

Returnarea unui nou dicționar cu valori sortate

După sortarea unui dicționar după valori, pentru a păstra un dicționar sortat în versiunile Python înainte de 3.7, trebuie să utilizați OrderedDict – disponibil în collections modul. Aceste obiecte sunt dicționare care păstrează ordinea inserării.

Iată un exemplu de sortare și utilizare OrderedDict:

import operator
from collections import OrderedDict

dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)  

sorted_dict = OrderedDict()
for k, v in sorted_tuples:
    sorted_dict[k] = v

print(sorted_dict)  

Concluzie

Acest tutorial a arătat cum un dicționar poate fi sortat în funcție de valorile sale. Mai întâi am sortat un dicționar folosind două bucle for. Apoi ne-am îmbunătățit sortarea utilizând sorted() funcţie. Am văzut și noi itemgetter() funcție din operator modulul poate face soluția noastră mai succintă.

În cele din urmă, ne-am adaptat soluția pentru a funcționa pe versiuni Python mai mici decât 3.7.

Variante ale sorted() funcția sunt cele mai populare și de încredere pentru a sorta un dicționar după valori.

Timestamp-ul:

Mai mult de la Stackabuse