Kuinka lajitella sanakirja arvon mukaan Pythonissa

esittely

Pythonin sanakirja on kokoelma kohteita, jotka tallentavat tiedot avain-arvo-pareina. Python 3.7:ssä ja uudemmissa versioissa sanakirjat lajitellaan kohteen lisäysjärjestyksen mukaan. Aiemmissa versioissa ne olivat järjestämättömiä.

Tässä artikkelissa tarkastellaan, kuinka voimme lajitella sanakirjan sen sisältämien arvojen perusteella.

Lajittele sanakirja käyttämällä a varten Silmukka

Voimme lajitella sanakirjan a for silmukka. Ensin käytämme sorted() toimintoa, joka järjestää sanakirjan arvot. Selaamme sitten lajiteltuja arvoja ja etsimme avaimet kullekin arvolle. Lisäämme nämä avain-arvo-parit järjestykseen uuteen sanakirjaan.

Huomautus: Lajittelu ei salli sanakirjan järjestämistä uudelleen paikoilleen. Kirjoitamme tilatut parit täysin uuteen, tyhjään sanakirjaan.

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)

Jos suoritat tämän Python-tulkin avulla, näet:

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

Nyt kun olemme nähneet kuinka lajitella silmukoiden avulla, katsotaanpa suositumpaa vaihtoehtoa, joka käyttää sorted() toiminto.

Lajittele sanakirja käyttämällä lajiteltu () Toiminto

Käytimme aiemmin sorted() funktio lajitella taulukon arvot. Kun lajittelemme sanakirjaa, voimme välittää vielä yhden argumentin sanalle sorted() toimi näin: sorted(dict1, key=dict1.get).

Täällä key on funktio, jota kutsutaan jokaiselle elementille ennen kuin arvoja verrataan lajittelua varten. The get() menetelmä sanakirjaobjekteissa palauttaa sanakirjan avaimen arvon.

- sorted(dict1, key=dict1.get) lauseke palauttaa luettelon avaimista, joiden arvot on järjestetty järjestykseen. Sieltä voimme luoda uuden lajitellun sanakirjan:

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) 

Käyttäen sorted() -toiminto on vähentänyt koodin määrää, jonka meidän piti kirjoittaa käytön aikana for silmukat. Voimme kuitenkin yhdistää edelleen sorted() toiminto kanssa itemgetter() toiminto ytimekkäämpään ratkaisuun sanakirjojen lajitteluun arvojen mukaan.

Lajittele sanakirja käyttämällä operaattori Moduuli ja itemgetter()

- operator moduuli sisältää itemgetter() toiminto. Tämä funktio palauttaa kutsuttavan objektin, joka palauttaa kohteen objektista.

Esimerkiksi käytetään itemgetter() luodaksesi kutsuttavan objektin, joka palauttaa minkä tahansa sanakirjan arvon avaimella, joka on 2:

import operator

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

print(get_item_with_key_2(dict1))  

Jokaisella sanakirjalla on pääsy items() menetelmä. Tämä funktio palauttaa sanakirjan avainarvo-parit monikkoluettelona. Voimme lajitella monikkoluetteloa käyttämällä itemgetter() funktio nostaa monikon toisen arvon eli sanakirjan avainten arvon.

Kun se on lajiteltu, voimme luoda sanakirjan näiden arvojen perusteella:

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) 

Paljon pienemmällä vaivalla meillä on arvojen mukaan lajiteltu sanakirja!

Kuten key argumentti hyväksyy minkä tahansa funktion, voimme käyttää lambda-funktioita palauttamaan sanakirja-arvot, jotta ne voidaan lajitella. Katsotaanpa miten.

Lajittele sanakirja lambda-funktion avulla

Lambda-funktiot ovat anonyymejä tai nimettömiä toimintoja Pythonissa. Voimme käyttää lambda-funktioita saadaksemme sanakirjakohteen arvon ilman, että sitä tarvitsee tuoda operator moduuli varten itemgetter(). Jos haluat oppia lisää lambdoista, voit lukea niistä oppaastamme Lambda-funktiot Pythonissa.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Lajitellaan sanakirja arvojen mukaan käyttämällä lambda-funktiota key argumentti 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)  

Huomaa, että tähän mennessä käsittelemämme menetelmät toimivat vain Python 3.7:n ja uudempien kanssa. Katsotaanpa, mitä voimme tehdä Pythonin aiemmille versioille.

Uuden sanakirjan palauttaminen järjestetyillä arvoilla

Kun olet lajitellut sanakirjan arvojen mukaan, sinun on käytettävä lajiteltua sanakirjaa Python-versioissa ennen versiota 3.7. OrderedDict - saatavilla osoitteessa collections moduuli. Nämä objektit ovat sanakirjoja, jotka pitävät lisäysjärjestyksen.

Tässä on esimerkki lajittelusta ja käytöstä 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)  

Yhteenveto

Tämä opetusohjelma osoitti, kuinka sanakirja voidaan lajitella sen arvojen perusteella. Lajittelimme ensin sanakirjan käyttämällä kahta silmukkaa. Sitten paransimme lajitteluamme käyttämällä sorted() toiminto. Olemme myös nähneet itemgetter() toiminto operator moduuli voi tehdä ratkaisustamme ytimekkäämmän.

Lopuksi sovitimme ratkaisumme toimimaan Python-versioissa, jotka ovat vanhempia kuin 3.7.

Muunnelmia sorted() funktio ovat suosituin ja luotettavin sanakirjan lajittelussa arvojen mukaan.

Aikaleima:

Lisää aiheesta Stackabus