Cum să sortați un dicționar Python după cheie sau valoare

În acest ghid, vei descoperi cum să organizezi un dicționar în Python, fie după cheie, fie după valoare.

Atunci când manipulezi un dicționar în Python, adesea apare necesitatea de a-i ordona conținutul – fie după chei, fie după valorile asociate. Dat fiind că un dicționar Python reprezintă o structură de date cheie-valoare, procesul implică crearea unui dicționar nou, în care cheile sau valorile sunt sortate conform cerințelor tale.

În continuare, vom revedea elementele fundamentale ale dicționarelor în Python. Apoi, vom explora modalități de a crea un dicționar nou, în care elementele sunt aranjate în funcție de chei sau valori, în funcție de necesitate.

Reîmprospătarea cunoștințelor despre dicționare în Python

Ce este un dicționar în Python?

Dicționarul este o structură de date fundamentală în Python. Acesta stochează informații sub formă de perechi cheie-valoare. Cheile permit accesul la valorile corespunzătoare, și, întrucât cheile trebuie să identifice unic valorile, nu ar trebui să existe duplicări ale acestora.

     
py_dict = {"Python":"cool!","Learn":True}
py_dict["Python"]
# Ieșire: cool!

py_dict["Learn"]
# Ieșire: True
     
   

Din punct de vedere funcțional, un dicționar este similar cu o tabelă hash. Prin urmare, nu este o structură de date ordonată în mod inerent. Poți accesa conținutul unui dicționar în orice ordine, atâta timp cât cunoști cheile respective.

Ordinea elementelor într-un dicționar

În versiunile anterioare ale limbajului Python, era necesară utilizarea unui OrderedDict pentru a menține ordinea în care erau inserate cheile. Începând cu Python 3.7, elementele pot fi accesate în aceeași ordine în care au fost adăugate inițial în dicționar.

Acum că ai revizuit elementele esențiale ale dicționarelor Python, să trecem la învățarea metodelor prin care putem crea copii sortate ale unui dicționar.

⚙️ Notă: Pentru ca exemplele de cod din acest ghid să funcționeze corespunzător, este necesar să ai Python 3.7 sau o versiune ulterioară. Poți descărca ultima versiune de Python sau poți utiliza editorul online Python de pe tipstrick.ro.

Cum să sortezi un dicționar Python după cheie

Imaginează-ți meniul de deserturi al unei cafenele. Acesta este structurat în două coloane, una cu numele deserturilor și alta cu prețurile corespunzătoare.

Această structură poate fi reprezentată printr-un dicționar în Python, unde numele deserturilor sunt cheile, iar prețurile sunt valorile asociate.

Să creăm împreună acest dicționar cu deserturi, conform codului de mai jos.

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

Acum, să construim un dicționar numit sorted_desserts, unde deserturile sunt listate în ordine alfabetică. În dicționarul original, desserts, numele sunt cheile. Prin urmare, pentru a obține un nou dicționar ordonat alfabetic, vom sorta cheile existente.

Cum să accesezi cheile unui dicționar în Python

Pentru a realiza acest lucru, vom obține inițial toate cheile din dicționar și apoi le vom sorta în ordine alfabetică.

În Python, poți folosi metoda încorporată .keys(), specifică dicționarelor, pentru a obține o listă cu toate cheile disponibile.

Să aplicăm metoda .keys() pe dicționarul nostru de deserturi, conform exemplului de mai jos.

     
keys = desserts.keys()
print(keys)

#Ieșire
['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 
'Cup cake']
     
   

Funcția sorted(), încorporată în Python, preia o listă ca argument și returnează o nouă listă, sortată.

Așadar, să apelăm sorted() cu lista de chei ca argument și să salvăm lista ordonată în variabila sorted_keys.

     
sorted_keys = sorted(keys)
print(sorted_keys)

# Ieșire
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']
     
   

Acum, având cheile sortate alfabetic, putem utiliza lista sorted_keys pentru a căuta valorile corespunzătoare în dicționarul inițial desserts, conform codului următor.

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

print(sorted_desserts)

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

Să analizăm mai detaliat blocul de cod anterior:

  • Am inițializat sorted_desserts ca un dicționar gol.
  • Parcurgem lista de chei sortate sorted_keys folosind o buclă.
  • Pentru fiecare cheie din sorted_keys, adăugăm o nouă intrare în sorted_desserts, cu valoarea asociată din dicționarul desserts.

Utilizarea unei bucle for poate fi considerată prolixă. În Python, există o metodă mai compactă, folosind înțelegerea dicționarului.

Înțelegerea dicționarului în Python

Limbajul Python suportă înțelegerea dicționarului, similar cu înțelegerea listelor. Această metodă permite crearea unui nou dicționar printr-o singură linie de cod.

▶️ Iată structura generală pentru a utiliza înțelegerea dicționarului în Python.

     
# 1. Când ai atât chei cât și valori în două liste: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. Când ai cheile și poți căuta valorile
new_dict = {key:value for key in <iterable>}
     
   

Vom utiliza a doua formă a construcției new_dict = {key:value for key in <iterable>} pentru a crea dicționarul sorted_desserts.

În acest exemplu:

  • iterable: lista sorted_keys
  • key: cheia pe care o accesăm parcurgând sorted_keys
  • value: valoarea corespunzătoare cheii, căutată în dicționarul desserts, adică desserts[key]

Punând toate elementele împreună, obținem expresia pentru înțelegerea dicționarului, așa cum se arată mai jos.

     
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}
     
   

Conform rezultatului de mai sus, deserturile sunt aranjate în ordine alfabetică în dicționarul sorted_desserts.

Cum să sortezi un dicționar Python după valoare

În continuare, vom învăța cum să ordonăm un dicționar Python bazându-ne pe valorile sale.

În dicționarul desserts, valorile reprezintă prețurile deserturilor. S-ar putea să dorim să sortăm dicționarul după aceste prețuri, fie în ordine crescătoare, fie descrescătoare.

▶️ Putem folosi metoda încorporată a dicționarului, .items(), pentru a obține toate perechile cheie-valoare. Fiecare pereche este returnată ca un tuplu.

     
desserts.items()

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

Fiecare element rezultat este un tuplu. Prin urmare, putem accesa individual cheile și valorile din fiecare pereche.

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

# Ieșire
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
     
   

Întrucât intenționăm să sortăm după valori, vom folosi metoda de mai sus pentru a obține valoarea de la indexul 1 din fiecare pereche cheie-valoare.

Cum să sortezi valorile unui dicționar Python în ordine crescătoare

De această dată, vom utiliza funcția sorted() împreună cu parametrul opțional key. Acesta poate fi o funcție Python, încorporată, definită de utilizator sau chiar o funcție lambda.

Reține: lambda args: expression este sintaxa pentru definirea funcțiilor lambda în Python.

În exemplul nostru, unde dorim să sortăm deserturile după preț, vom avea acces la perechile cheie-valoare din dicționar. Vom atribui key = lambda item:item[1] deoarece dorim să sortăm după valoare (preț).

Întrucât sorted() returnează implicit o listă, trebuie să o convertim explicit într-un dicționar, după cum se arată mai jos.

     
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}
     
   

De asemenea, putem rescrie codul folosind înțelegerea dicționarului, așa cum am discutat anterior.

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

print(sorted_desserts)

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

În sorted_desserts, Cup Cake, cu prețul de 2 USD, este primul articol, iar Brownies, cu prețul de 12 USD, este ultimul.

Cum să sortezi valorile unui dicționar Python în ordine descrescătoare

Dacă dorim să sortăm prețurile în ordine descrescătoare, putem seta parametrul opțional reverse la True, după cum se arată mai jos.

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

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

Acum, sorted_desserts este sortat în ordine descrescătoare a prețurilor, începând cu cel mai scump desert, Brownies, la 12 USD.

Încheiere 👩🏽‍💻

Să recapitulăm pe scurt principalele aspecte învățate în acest ghid.

  • Un dicționar Python stochează date sub formă de perechi cheie-valoare, iar cheile trebuie să fie unice.
  • Pentru a sorta un dicționar după cheie sau valoare, creăm un dicționar nou, ordonat conform cerințelor.
  • Putem folosi metodele încorporate ale dicționarelor, .keys() și .items(), pentru a prelua toate cheile și, respectiv, perechile cheie-valoare.
  • Funcția sorted(), împreună cu parametrii opționali key și reverse, ne ajută să obținem sortarea dorită.

Acum că ai învățat cum să sortezi un dicționar Python, te invităm să explorezi și metodele de sortare a listelor în Python. Spor la codat!🎉