Hvordan sortere en ordbok etter verdi i Python

Introduksjon

En ordbok i Python er en samling elementer som lagrer data som nøkkelverdi-par. I Python 3.7 og senere versjoner er ordbøker sortert etter rekkefølgen på elementinnsetting. I tidligere versjoner var de uordnet.

I denne artikkelen skal vi se på hvordan vi kan sortere en ordbok på grunnlag av verdiene den inneholder.

Sorter ordbok ved å bruke en forum Loop

Vi kan sortere en ordbok ved hjelp av en for Løkke. Først bruker vi sorted() funksjon for å bestille verdiene til ordboken. Vi går deretter gjennom de sorterte verdiene, og finner nøklene for hver verdi. Vi legger til disse nøkkelverdi-parene i sortert rekkefølge i en ny ordbok.

OBS: Sortering lar deg ikke omorganisere ordboken på plass. Vi skriver de bestilte parene i en helt ny, tom ordbok.

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)

Hvis du kjører dette med Python-tolken vil du se:

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

Nå som vi har sett hvordan du sorterer med løkker, la oss se på et mer populært alternativ som bruker sorted() funksjon.

Sorter ordbok ved å bruke sortert () Funksjon

Vi brukte tidligere sorted() funksjon for å sortere verdiene til en matrise. Når vi sorterer en ordbok, kan vi sende ett argument til til sorted() fungerer slik: sorted(dict1, key=dict1.get).

Her key er en funksjon som kalles på hvert element før verdiene sammenlignes for sortering. De get() metode på ordbokobjekter returnerer verdien av en ordboks nøkkel.

De sorted(dict1, key=dict1.get) uttrykk vil returnere listen over nøkler hvis verdier er sortert i rekkefølge. Derfra kan vi lage en ny, sortert ordbok:

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) 

Bruke sorted() funksjonen har redusert mengden kode vi måtte skrive når vi brukte for løkker. Imidlertid kan vi kombinere ytterligere sorted() funksjon med itemgetter() funksjon for en mer kortfattet løsning på sortering av ordbøker etter verdier.

Sorter ordbok ved å bruke operatør Modul og itemgetter()

De operator modulen inkluderer itemgetter() funksjon. Denne funksjonen returnerer et anropbart objekt som returnerer et element fra et objekt.

For eksempel, la oss bruke itemgetter() å lage et anropbart objekt som returnerer verdien til en hvilken som helst ordbok med en nøkkel som er 2:

import operator

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

print(get_item_with_key_2(dict1))  

Hver ordbok har tilgang til items() metode. Denne funksjonen returnerer nøkkelverdi-parene til en ordbok som en liste over tupler. Vi kan sortere listen over tupler ved å bruke itemgetter() funksjon for å trekke den andre verdien av tuppelen, dvs. verdien av nøklene i ordboken.

Når det er sortert, kan vi lage en ordbok basert på disse verdiene:

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) 

Med mye mindre innsats har vi en ordbok sortert etter verdier!

Som key argument aksepterer enhver funksjon, kan vi bruke lambda-funksjoner for å returnere ordbokverdier slik at de kan sorteres. La oss se hvordan.

Sorter ordbok ved hjelp av en lambda-funksjon

Lambda-funksjoner er anonyme, eller navnløse, funksjoner i Python. Vi kan bruke lambda-funksjoner for å få verdien av et ordbokelement uten å måtte importere operator modul for itemgetter(). Hvis du vil lære mer om lambdaer, kan du lese om dem i vår guide til Lambda-funksjoner i Python.

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

La oss sortere en ordbok etter verdier ved å bruke en lambda-funksjon i key argument av 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)  

Merk at metodene vi har diskutert så langt bare fungerer med Python 3.7 og senere. La oss se hva vi kan gjøre for tidligere versjoner av Python.

Returnerer en ny ordbok med sorterte verdier

Etter å ha sortert en ordbok etter verdier, for å beholde en sortert ordbok i Python-versjoner før 3.7, må du bruke OrderedDict – tilgjengelig i collections modul. Disse objektene er ordbøker som holder rekkefølgen for innsetting.

Her er et eksempel på sortering og bruk 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)  

konklusjonen

Denne opplæringen viste hvordan en ordbok kan sorteres basert på verdiene. Vi sorterte først en ordbok ved å bruke to for løkker. Vi forbedret deretter sorteringen vår ved å bruke sorted() funksjon. Vi har også sett itemgetter() funksjon fra operator modul kan gjøre løsningen vår mer kortfattet.

Til slutt tilpasset vi løsningen vår til å fungere på Python-versjoner lavere enn 3.7.

Variasjoner av sorted() funksjon er de mest populære og pålitelige for å sortere en ordbok etter verdier.

Tidstempel:

Mer fra Stackabuse