Kuidas Pythonis sõnaraamatut väärtuse järgi sortida

Sissejuhatus

Pythoni sõnastik on üksuste kogum, mis salvestab andmed võtme-väärtuste paaridena. Python 3.7 ja uuemates versioonides sorteeritakse sõnastikke üksuste sisestamise järjekorras. Varasemates versioonides olid need järjestamata.

Selles artiklis vaatleme, kuidas saame sorteerida sõnastikku nendes sisalduvate väärtuste alusel.

Sorteeri sõnastik kasutades a eest Silmus

Sõnaraamatut saame sorteerida a abiga for silmus. Esiteks kasutame sorted() funktsioon sõnastiku väärtuste järjestamiseks. Seejärel vaatame sorteeritud väärtusi läbi, leides iga väärtuse jaoks võtmed. Lisame need võtme-väärtuste paarid sorteeritud järjekorras uude sõnastikku.

Märge: Sorteerimine ei võimalda sõnaraamatut oma kohale ümber järjestada. Kirjutame tellitud paarid täiesti uude tühja sõnastikku.

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)

Kui käivitate selle Pythoni tõlgiga, näete järgmist:

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

Nüüd, kui oleme näinud, kuidas silmustega sortida, vaatame populaarsemat alternatiivi, mis kasutab sorted() funktsiooni.

Sorteeri sõnastik kasutades sorteeritud () funktsioon

Varem kasutasime sorted() funktsioon massiivi väärtuste sortimiseks. Sõnastiku sortimisel saame anda veel ühe argumendi sorted() toimib nii: sorted(dict1, key=dict1.get).

Siin key on funktsioon, mida kutsutakse igal elemendil enne väärtuste võrdlemist sortimiseks. The get() meetod sõnastikuobjektidel tagastab sõnastiku võtme väärtuse.

. sorted(dict1, key=dict1.get) avaldis tagastab võtmete loendi, mille väärtused on järjestatud. Sealt saame luua uue sorteeritud sõnastiku:

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) 

kasutades sorted() funktsioon on vähendanud koodi hulka, mida pidime kasutamisel kirjutama for silmuseid. Siiski saame neid veelgi kombineerida sorted() funktsiooniga itemgetter() funktsioon sõnaraamatute väärtuste järgi sortimise täpsemaks lahenduseks.

Sorteeri sõnastik kasutades operaator Moodul ja itemgetter()

. operator moodul sisaldab itemgetter() funktsiooni. See funktsioon tagastab kutsutava objekti, mis tagastab objektilt üksuse.

Näiteks kasutame itemgetter() kutsutava objekti loomiseks, mis tagastab mis tahes sõnastiku väärtuse võtmega, mis on 2:

import operator

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

print(get_item_with_key_2(dict1))  

Igal sõnastikul on juurdepääs items() meetod. See funktsioon tagastab sõnastiku võtme-väärtuse paarid korteežide loendina. Korterite loendit saame sortida kasutades itemgetter() funktsioon korteeži teise väärtuse, st sõnaraamatu klahvide väärtuse tõmbamiseks.

Kui see on sorteeritud, saame nende väärtuste põhjal luua sõnastiku:

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) 

Palju väiksema vaevaga on meil väärtuste järgi sorteeritud sõnastik!

Kui key argument aktsepteerib mis tahes funktsiooni, saame sõnastiku väärtuste tagastamiseks kasutada lambda-funktsioone, et neid saaks sortida. Vaatame, kuidas.

Sorteeri sõnastik lambda funktsiooni abil

Lambda funktsioonid on Pythonis anonüümsed või nimetud funktsioonid. Sõnastiku üksuse väärtuse saamiseks saame kasutada lambda-funktsioone ilma, et peaksime seda importima operator moodul jaoks itemgetter(). Kui soovite lambdade kohta rohkem teada saada, lugege nende kohta meie juhendist Lambda funktsioonid Pythonis.

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Sorteerime sõnastiku väärtuste järgi, kasutades lambda-funktsiooni 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)  

Pange tähele, et meetodid, mida oleme seni arutanud, töötavad ainult Python 3.7 ja uuemate versioonidega. Vaatame, mida saame Pythoni varasemate versioonide jaoks teha.

Uue sorteeritud väärtustega sõnastiku tagastamine

Pärast sõnastiku väärtuste järgi sortimist, et hoida sorteeritud sõnastikku Pythoni versioonides enne 3.7, peate kasutama OrderedDict – saadaval aadressil collections moodul. Need objektid on sõnastikud, mis hoiavad sisestamise järjekorda.

Siin on näide sortimisest ja kasutamisest 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)  

Järeldus

See õpetus näitas, kuidas saab sõnastikku väärtuste alusel sorteerida. Esmalt sorteerisime sõnastiku, kasutades kahte silmust. Seejärel täiustasime oma sorteerimist, kasutades sorted() funktsiooni. Oleme näinud ka itemgetter() funktsioonist operator moodul võib muuta meie lahenduse sisutihedamaks.

Lõpuks kohandasime oma lahenduse Pythoni versioonidele, mis on vanemad kui 3.7.

Variatsioonid sorted() funktsioon on kõige populaarsem ja usaldusväärsem sõnastiku väärtuste järgi sorteerimiseks.

Ajatempel:

Veel alates Stackabus