Kako razvrstiti slovar po vrednosti v Pythonu

Predstavitev

Slovar v Pythonu je zbirka elementov, ki shranjuje podatke kot pare ključ-vrednost. V Python 3.7 in novejših različicah so slovarji razvrščeni po vrstnem redu vstavljanja elementov. V prejšnjih različicah niso bili urejeni.

V tem članku si bomo ogledali, kako lahko razvrstimo slovar na podlagi vrednosti, ki jih vsebuje.

Razvrsti slovar z uporabo a za Zanka

Slovar lahko razvrstimo s pomočjo a for zanka. Najprej uporabimo sorted() funkcijo za urejanje vrednosti slovarja. Nato preletimo razvrščene vrednosti in poiščemo ključe za vsako vrednost. Te pare ključ-vrednost v razvrščenem vrstnem redu dodamo v nov slovar.

Opomba: Razvrščanje vam ne omogoča preurejanja slovarja na mestu. Urejene pare pišemo v popolnoma nov, prazen slovar.

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)

Če to zaženete s tolmačem Python, bi videli:

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

Zdaj, ko smo videli, kako razvrščati z zankami, si poglejmo bolj priljubljeno alternativo, ki uporablja sorted() Funkcija.

Razvrsti slovar z uporabo razvrščeno () funkcija

Prej smo uporabljali sorted() funkcijo za razvrščanje vrednosti matrike. Pri razvrščanju slovarja lahko posredujemo še en argument sorted() deluje tako: sorted(dict1, key=dict1.get).

Tu key je funkcija, ki se kliče za vsak element, preden se vrednosti primerjajo za razvrščanje. The get() metoda na objektih slovarja vrne vrednost ključa slovarja.

O sorted(dict1, key=dict1.get) izraz bo vrnil seznam ključev, katerih vrednosti so razvrščene po vrstnem redu. Od tam lahko ustvarimo nov, razvrščen slovar:

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) 

Uporaba sorted() funkcija je zmanjšala količino kode, ki smo jo morali napisati pri uporabi for zanke. Lahko pa jih še dodatno kombiniramo sorted() funkcijo z itemgetter() funkcijo za bolj jedrnato rešitev za razvrščanje slovarjev po vrednostih.

Razvrsti slovar z uporabo operater Modul in itemgetter()

O operator modul vključuje itemgetter() funkcijo. Ta funkcija vrne predmet, ki ga je mogoče priklicati in vrne element iz predmeta.

Na primer, uporabimo itemgetter() da ustvarite kličljiv predmet, ki vrne vrednost katerega koli slovarja s ključem, ki je 2:

import operator

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

print(get_item_with_key_2(dict1))  

Vsak slovar ima dostop do items() metoda. Ta funkcija vrne pare ključ-vrednost slovarja kot seznam tork. Seznam tulp lahko razvrstimo z uporabo itemgetter() funkcija za vlečenje druge vrednosti tuple, tj. vrednosti ključev v slovarju.

Ko je razvrščen, lahko ustvarimo slovar na podlagi teh vrednosti:

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) 

Z veliko manj truda imamo slovar razvrščen po vrednostih!

Kot key argument sprejme katero koli funkcijo, lahko uporabimo lambda funkcije, da vrnemo slovarske vrednosti, tako da jih je mogoče razvrstiti. Poglejmo, kako.

Razvrsti slovar s funkcijo Lambda

Lambda funkcije so anonimne ali brezimne funkcije v Pythonu. Funkcije lambda lahko uporabimo za pridobitev vrednosti slovarske postavke, ne da bi morali uvoziti operator modul za itemgetter(). Če želite izvedeti več o lambdah, si o njih lahko preberete v našem vodniku Lambda funkcije v Pythonu.

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

Razvrstimo slovar po vrednostih z uporabo funkcije lambda v key argument 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)  

Upoštevajte, da metode, o katerih smo do sedaj razpravljali, delujejo samo s Pythonom 3.7 in novejšimi. Poglejmo, kaj lahko naredimo za prejšnje različice Pythona.

Vrnitev novega slovarja z razvrščenimi vrednostmi

Po razvrščanju slovarja po vrednostih, če želite obdržati razvrščeni slovar v različicah Pythona pred 3.7, morate uporabiti OrderedDict – na voljo v collections modul. Ti objekti so slovarji, ki ohranjajo vrstni red vstavljanja.

Tukaj je primer razvrščanja in uporabe 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)  

zaključek

Ta vadnica je pokazala, kako lahko slovar razvrstimo glede na njegove vrednosti. Najprej smo slovar razvrstili z dvema zankama for. Nato smo izboljšali naše razvrščanje z uporabo sorted() funkcijo. Videli smo tudi itemgetter() funkcija od operator modul lahko naredi našo rešitev bolj jedrnato.

Nazadnje smo našo rešitev prilagodili za delovanje na različicah Pythona, starejših od 3.7.

Različice sorted() so najbolj priljubljene in zanesljive za razvrščanje slovarja po vrednostih.

Časovni žig:

Več od Stackabuse