Introduktion
En ordbog i Python er en samling af elementer, der gemmer data som nøgleværdi-par. I Python 3.7 og senere versioner er ordbøger sorteret efter rækkefølgen af elementindsættelse. I tidligere versioner var de uordnede.
I denne artikel tager vi et kig på, hvordan vi kan sortere en ordbog ud fra de værdier, den indeholder.
Sorter ordbog ved hjælp af en forum Loop
Vi kan sortere en ordbog ved hjælp af en for
sløjfe. Først bruger vi sorted()
funktion til at bestille ordbogens værdier. Vi går derefter gennem de sorterede værdier og finder nøglerne for hver værdi. Vi tilføjer disse nøgleværdi-par i sorteret rækkefølge i en ny ordbog.
Bemærk: Sortering giver dig ikke mulighed for at omarrangere ordbogen på plads. Vi skriver de bestilte par i en helt ny, tom ordbog.
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 kører dette med Python-fortolkeren, vil du se:
{1: 1, 3: 4, 2: 9}
Nu hvor vi har set, hvordan man sorterer med loops, lad os se på et mere populært alternativ, der bruger sorted()
funktion.
Sorter ordbog ved hjælp af sorteret() Funktion
Vi brugte tidligere sorted()
funktion til at sortere værdierne af et array. Når vi sorterer en ordbog, kan vi videregive endnu et argument til sorted()
fungerer sådan her: sorted(dict1, key=dict1.get)
.
Her, key
er en funktion, der kaldes på hvert element, før værdierne sammenlignes til sortering. Det get()
metode på ordbogsobjekter returnerer værdien af en ordbogs nøgle.
sorted(dict1, key=dict1.get)
udtryk returnerer listen over nøgler, hvis værdier er sorteret i rækkefølge. Derfra kan vi oprette en ny, sorteret ordbog:
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)
Brug af sorted()
funktion har reduceret mængden af kode, vi skulle skrive, når vi brugte for
sløjfer. Vi kan dog kombinere yderligere sorted()
funktion med itemgetter()
funktion for en mere kortfattet løsning til at sortere ordbøger efter værdier.
Sorter ordbog ved hjælp af operatør Modul og itemgetter()
operator
modul indeholder itemgetter()
fungere. Denne funktion returnerer et kaldbart objekt, der returnerer et element fra et objekt.
Lad os f.eks. bruge itemgetter()
at oprette et kaldbart objekt, der returnerer værdien af enhver ordbog med en nøgle, der 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 ordbog har adgang til items()
metode. Denne funktion returnerer nøgleværdi-parrene i en ordbog som en liste over tupler. Vi kan sortere listen over tupler ved at bruge itemgetter()
funktion til at trække den anden værdi af tuple, dvs. værdien af nøglerne i ordbogen.
Når det er sorteret, kan vi oprette en ordbog baseret på disse værdier:
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 meget mindre indsats har vi en ordbog sorteret efter værdier!
Som key
argument accepterer enhver funktion, kan vi bruge lambda-funktioner til at returnere ordbogsværdier, så de kan sorteres. Lad os se hvordan.
Sorter ordbog ved hjælp af en lambdafunktion
Lambda-funktioner er anonyme eller navnløse funktioner i Python. Vi kan bruge lambda-funktioner til at få værdien af et ordbogselement uden at skulle importere operator
modul til itemgetter()
. Hvis du gerne vil lære mere om lambdaer, kan du læse om dem i vores guide til Lambda-funktioner i Python.
Tjek vores praktiske, praktiske guide til at lære Git, med bedste praksis, brancheaccepterede standarder og inkluderet snydeark. Stop med at google Git-kommandoer og faktisk lærer det!
Lad os sortere en ordbog efter værdier ved hjælp af en lambda-funktion i key
argument af 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)
Bemærk, at de metoder, vi har diskuteret indtil videre, kun virker med Python 3.7 og senere. Lad os se, hvad vi kan gøre for tidligere versioner af Python.
Returnerer en ny ordbog med sorterede værdier
Efter at have sorteret en ordbog efter værdier, for at holde en sorteret ordbog i Python-versioner før 3.7, skal du bruge OrderedDict
– tilgængelig i collections
modul. Disse objekter er ordbøger, der holder rækkefølgen af indsættelse.
Her er et eksempel på sortering og brug 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)
Konklusion
Denne vejledning viste, hvordan en ordbog kan sorteres ud fra dens værdier. Vi sorterede først en ordbog ved hjælp af to for sløjfer. Vi forbedrede derefter vores sortering ved at bruge sorted()
fungere. Vi har også set itemgetter()
funktion fra operator
modul kan gøre vores løsning mere kortfattet.
Til sidst tilpassede vi vores løsning til at fungere på Python-versioner lavere end 3.7.
Variationer af sorted()
funktion er de mest populære og pålidelige til at sortere en ordbog efter værdier.