Beskrivning
En ordbok i Python är en samling objekt som lagrar data som nyckel-värdepar. I Python 3.7 och senare versioner sorteras ordlistor efter ordningen för insättning av objekt. I tidigare versioner var de oordnade.
I den här artikeln ska vi ta en titt på hur vi kan sortera en ordbok utifrån de värden den innehåller.
Sortera ordbok med hjälp av en för loop
Vi kan sortera en ordbok med hjälp av en for
slinga. Först använder vi sorted()
funktion för att ordna värdena i ordboken. Vi går sedan igenom de sorterade värdena och hittar nycklarna för varje värde. Vi lägger till dessa nyckel-värdepar i sorterad ordning i en ny ordbok.
Notera: Sortering tillåter dig inte att ordna om ordlistan på plats. Vi skriver de beställda paren 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)
Om du kör detta med Python-tolken skulle du se:
{1: 1, 3: 4, 2: 9}
Nu när vi har sett hur man sorterar med loopar, låt oss titta på ett mer populärt alternativ som använder sorted()
funktion.
Sortera ordbok med hjälp av sorterad() Funktion
Vi använde tidigare sorted()
funktion för att sortera värdena för en matris. När vi sorterar en ordbok kan vi skicka ytterligare ett argument till sorted()
fungerar så här: sorted(dict1, key=dict1.get)
.
Här, key
är en funktion som anropas på varje element innan värdena jämförs för sortering. De get()
metod på ordboksobjekt returnerar värdet på en ordboksnyckel.
Smakämnen sorted(dict1, key=dict1.get)
expression returnerar listan över nycklar vars värden är sorterade i ordning. Därifrån kan vi skapa en ny, sorterad 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)
Använda sorted()
funktionen har minskat mängden kod vi var tvungna att skriva när vi använde for
slingor. Men vi kan kombinera ytterligare sorted()
funktion med itemgetter()
funktion för en mer kortfattad lösning för att sortera ordböcker efter värden.
Sortera ordbok med hjälp av Operatören Modul och itemgetter()
Smakämnen operator
modulen innehåller itemgetter()
fungera. Denna funktion returnerar ett anropsbart objekt som returnerar ett objekt från ett objekt.
Till exempel, låt oss använda itemgetter()
för att skapa ett anropsbart objekt som returnerar värdet av valfri ordbok med en nyckel som är 2
:
import operator
dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)
print(get_item_with_key_2(dict1))
Varje ordbok har tillgång till items()
metod. Den här funktionen returnerar nyckel-värdeparen i en ordbok som en lista över tupler. Vi kan sortera listan över tuplar genom att använda itemgetter()
funktion för att dra det andra värdet av tupeln dvs värdet på nycklarna i ordboken.
När det är sorterat kan vi skapa en ordbok baserad på dessa värden:
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 mycket mindre ansträngning har vi en ordbok sorterad efter värderingar!
Som key
argument accepterar vilken funktion som helst, vi kan använda lambda-funktioner för att returnera ordboksvärden så att de kan sorteras. Låt oss se hur.
Sortera ordbok med en lambdafunktion
Lambdafunktioner är anonyma, eller namnlösa, funktioner i Python. Vi kan använda lambda-funktioner för att få värdet av ett ordboksobjekt utan att behöva importera operator
modul för itemgetter()
. Om du vill lära dig mer om lambdas kan du läsa om dem i vår guide till Lambdafunktioner i Python.
Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!
Låt oss sortera en ordbok efter värden med hjälp av en lambda-funktion 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)
Observera att metoderna vi har diskuterat hittills bara fungerar med Python 3.7 och senare. Låt oss se vad vi kan göra för tidigare versioner av Python.
Returnera en ny ordbok med sorterade värden
Efter att ha sorterat en ordbok efter värden, för att behålla en sorterad ordbok i Python-versioner före 3.7, måste du använda OrderedDict
– finns i collections
modul. Dessa objekt är ordböcker som håller ordningsföljden för insättning.
Här är ett exempel på sortering och användning 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)
Slutsats
Denna handledning visade hur en ordbok kan sorteras utifrån dess värden. Vi sorterade först en ordbok med två för loopar. Vi förbättrade sedan vår sortering genom att använda sorted()
fungera. Vi har också sett itemgetter()
funktion från operator
modul kan göra vår lösning mer kortfattad.
Slutligen anpassade vi vår lösning för att fungera på Python-versioner lägre än 3.7.
Variationer av sorted()
funktion är de mest populära och tillförlitliga för att sortera en ordbok efter värden.