Sådan sorteres en ordbog efter værdi i Python

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.

Tidsstempel:

Mere fra Stablemisbrug