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

În acest tutorial, veți învăța cum să sortați un dicționar Python după cheia sau valoarea sa.

Când lucrați cu un dicționar în Python, există momente când va trebui să-i sortați conținutul — după cheie sau după valoare. Deoarece un dicționar Python este o mapare cheie-valoare, veți crea un nou dicționar care are cheile sau valorile sortate după cum este necesar.

În acest tutorial, vom începe prin a revizui elementele de bază ale dicționarului Python. Vom învăța apoi să creăm un nou dicționar în care conținutul să fie sortat după cheie sau după valoare, după cum este necesar.

Python Dictionary Basics, Revisited

Ce este un dicționar Python?

Dicționarul este o structură de date încorporată în Python. Stochează articolele ca perechi cheie-valoare. Puteți folosi tastele pentru a căuta valorile corespunzătoare. Deoarece cheile identifică în mod unic valorile, nu ar trebui să existe nicio repetare a cheilor.

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

py_dict["Learn"]
# Output: True

Din punct de vedere funcțional, un dicționar este similar cu o hartă hash. Prin urmare, nu este neapărat o structură de date ordonată. Puteți accesa conținutul unui dicționar în orice ordine arbitrară, atâta timp cât cunoașteți cheile.

Ordonarea articolelor într-un dicționar

În versiunile anterioare de Python, trebuia să utilizați un OrderedDict pentru a păstra ordinea cheilor. Cu toate acestea, din Python 3.7, puteți accesa articolele în aceeași ordine în care le adăugați în dicționar.

Acum că ați învățat elementele de bază ale dicționarelor Python, să învățăm cum să creăm copii sortate ale dicționarului.

⚙️ Notă: Trebuie să aveți Python 3.7 sau o versiune ulterioară pentru ca codul din acest tutorial să funcționeze conform așteptărilor. Puteți descărca cea mai recentă versiune de Pythonsau rulați exemplele în tipstrick.ro Online Python Editor.

  Whistle Camera ascultă un semnal audio și face o imagine

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

Priviți următoarea imagine a meniului de deserturi la o cafenea. Există două coloane care corespund articolelor din meniu și prețurilor respective.

Puteți reprezenta acest lucru sub forma unui dicționar Python prin colectarea numelor articolelor ca chei și prețurile acestora ca valori.

Să mergem mai departe și să creăm deserturile din dicționar, așa cum se arată mai jos.

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

În continuare, să creăm un dicționar sorted_dessers, unde deserturile sunt aranjate în ordine alfabetică. În dicționarul original de deserturi, numele deserturilor sunt cheile. Deci, ar trebui să sortați aceste chei în ordine alfabetică pentru a crea un nou dicționar.

Cum să accesați cheile unui dicționar Python

Pentru a face acest lucru, vom obține mai întâi cheile dicționarului și apoi le vom sorta în ordine alfabetică.

În Python, puteți utiliza metoda de dicționar încorporată .keys() pentru a obține o listă cu toate cheile din dicționar.

Să apelăm metoda .keys() din dicționarul de desert pentru a prelua cheile, așa cum se arată mai jos.

keys = desserts.keys()
print(keys)

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

Apelarea funcției sortate() încorporată din Python cu o listă ca argument returnează o nouă listă sortată.

Apoi, să apelăm funcția sorted() cu cheile listă ca argument și să stocăm lista sortată în variabila sorted_keys.

sorted_keys = sorted(keys)
print(sorted_keys)

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

Acum că avem cheile sortate în ordine alfabetică, putem căuta valorile corespunzătoare cheilor din sorted_keys din dicționarul de deserturi, așa cum se arată mai jos.

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}

Să extindem blocul de cod de mai sus:

  • Inițializați sorted_dessers pentru a fi un dicționar Python gol.
  • Căutați în buclă lista de chei sorted_keys.
  • Pentru fiecare cheie din sorted_keys, adăugați o intrare la sorted_desserts căutând valoarea corespunzătoare în dicționarul de deserturi.
  Ce sunt și cum să le instalezi

Folosirea buclei for astfel este considerată verbosă. În Python, există o alternativă mai concisă folosind înțelegerea dicționarului.

Dicţionar Comprehension în Python

Python acceptă utilizarea înțelegerii dicționarului, similar cu înțelegerea listelor. Înțelegerea dicționarului vă permite să creați un nou dicționar Python cu o singură linie de cod.

▶️ Iată construcția generală pentru a utiliza înțelegerea dicționarului în 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>}

Să folosim al doilea construct din celula de mai sus: new_dict = {key:value for key in } pentru a crea un dicționar sorted_dessers.

În acest exemplu:

  • iterabil: lista sorted_keys
  • cheie: cheia pe care o accesăm prin bucla prin sorted_keys
  • valoare: caută valoarea corespunzătoare cheii din dicționarul de deserturi, deserturi[key]

Punând totul împreună, avem 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}

Din rezultatul de mai sus, deserturile sunt aranjate în ordine alfabetică în dicționarul sorted_dessers.

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

În continuare, vom învăța cum să sortăm un dicționar Python după valorile sale.

În dicționarul de deserturi, valorile corespund prețurilor deserturilor. Poate doriți să sortați dicționarul după prețuri, fie în ordine crescătoare, fie în ordine descrescătoare.

▶️ Puteți utiliza metoda de dicționar încorporată .items() pentru a obține toate perechile cheie-valoare. Fiecare tuplu este o pereche cheie-valoare.

desserts.items()

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

Fiecare dintre elemente este un tuplu în sine. Deci, puteți, de asemenea, să indexați în fiecare pereche cheie-valoare pentru a accesa cheile și valorile individual.

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

Deoarece am dori să sortăm după valori, vom folosi metoda de mai sus pentru a obține valoarea la indexul 1 din perechea cheie-valoare.

  10 aplicații/platforme de planificare a călătoriilor pentru a face itinerare pentru următoarea dvs. vacanță

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

De data aceasta, vom folosi funcția sorted() împreună cu parametrul opțional cheie. cheia poate fi orice funcție Python, o funcție încorporată, o funcție definită de utilizator sau chiar o functie lambda.

Notă: lambda args: expression este sintaxa pentru definirea funcțiilor lambda în Python.

În acest exemplu de sortare a deserturilor după preț, avem acces la articole din dicționar (perechi cheie-valoare). Vom seta key = lambda item:item[1] deoarece am dori să sortăm după valoare (preț).

Deoarece funcția sorted() returnează o listă în mod implicit, ar trebui să o aruncați în mod explicit într-un dict, așa 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, puteți rescrie folosind înțelegerea dicționaruluiDupă cum sa discutat mai devreme.

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}

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

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

Dacă doriți să sortați prețurile în ordine descrescătoare, puteți seta parametrul invers opțional la Adevărat, după cum se explică mai jos.

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}

Acum, sorted_desserts a fost sortat în ordinea descrescătoare a prețurilor, începând cu cel mai scump desert Brownie care costă 12 USD.

Încheierea 👩🏽‍💻

Să rezumam rapid tot ce am învățat în acest tutorial.

  • Un dicționar Python stochează date în perechi cheie-valoare; cheile ar trebui să fie toate unice.
  • În procesul de sortare a unui dicționar după cheie sau valoare, creăm un nou dicționar care este sortat după cum este necesar.
  • Puteți utiliza metodele de dicționar încorporate, .keys() și .items() pentru a prelua toate cheile și, respectiv, perechile cheie-valoare.
  • Puteți utiliza funcția sortat() împreună cu tasta parametrilor opționali și invers pentru a obține sortarea dorită.

Acum că ați învățat cum să sortați un dicționar Python, învățați să sortați listele Python. Codare fericită!🎉