Hvordan sorterer man en ordbog efter nøgle og værdi i Python?

Apr 2, 2020 – 4 min read

Hej, alle sammen. I dag vil jeg give korte tips om ordbogsortering i Python (Python3). Som vi alle ved er ordbøger i sagens natur ordningsløse, men det er andre typer, såsom list og tupler, ikke. Det er ikke muligt at sortere en ordbog, men vi kan lave en repræsentation af en ordbog, der er sorteret. Du har altså brug for en ordnet datatype til at repræsentere sorterede nøgler eller værdier, hvilket vil være en liste – sandsynligvis en liste af tupler.

Dictionary in Python (Source)

Proces for sortering af ordbøger

Som vi kan se i den første figur er ordbøger i python et sæt af nøgle-værdipar, hvor hvert par af nøgle-værdi kaldes et element. Lad os nu fokusere på det vigtigste problem: Ordbøger kan sorteres efter nøgler eller værdier. Som det er afgrænset i den anden figur kan vi sortere keys(), values() og items() i en ordbog. Lad os fokusere på sortering efter values() først.

sortering af ordbog efter værdi

Lad os have en ordbog bestående af flere velrenommerede organisationer som keys() og deres stiftelsesår som values(). Så vi ønsker at have en sorteret ordbog, hvor de ældste organisationselementer vil være det første element, og den yngste organisation vil være det sidste.

d = {"Apple": 1976, "Microsoft":1975, "Facebook":2004, "Sony":1946, "IBM":1911, "Amazon": 1994 }

Som vi kan se i ordbogen dictionary, er IBM den ældste organisation, hvorfor den vil være den første nøgle i den sorterede ordbog, og Facebook vil være den sidste.

print(sorted(d.items(), key = lambda kv:kv))
print(sorted(d.items(), key = lambda kv:kv, reverse = True))
print(dict(sorted(d.items(), key = lambda kv:kv)))
sort_d = dict(sorted(d.items(), key = lambda kv:kv))
print(sort_d)

Output:



{'IBM': 1911, 'Sony': 1946, 'Microsoft': 1975, 'Apple': 1976, 'Amazon': 1994, 'Facebook': 2004}
{'IBM': 1911, 'Sony': 1946, 'Microsoft': 1975, 'Apple': 1976, 'Amazon': 1994, 'Facebook': 2004}

Da vi sorterer d.items(), som er en liste af tupler, hvor keys()er den første parameter og values() er den anden parameter for hver tupel. Til sortering af listen af tupler har vi valgt værdierne, dvs. den anden parameter i hver tupel, som nøgle. I den første linje er nøglen defineret som en lambdafunktion, hvor nøgleværdien er den anden parameter for elementerne. Denne sortering vil skabe en liste af sorterede tupler. vi kan bare gøre det til en ordbog ved hjælp af dict()-funktionen, som vist i den tredje kodelinje. Vi kan også vende sorteringen om, hvilket i resultatet skaber en liste af tupler med den nyeste i først og den ældste vil være det sidste element som angivet i anden linje i koden. Vi kan også gemme den sorterede ordbog til et andet navn som vist ovenfor.

sortering af ordbog efter nøgle

print(sorted(d.items()))
print(dict(sorted(d.items())))
print(dict(sorted(d.items(), key = lambda kv:kv)))
print(sorted(d.items(), reverse = True))

Output:


{'Amazon': 1994, 'Apple': 1976, 'Facebook': 2004, 'IBM': 1911, 'Microsoft': 1975, 'Sony': 1946}
{'Amazon': 1994, 'Apple': 1976, 'Facebook': 2004, 'IBM': 1911, 'Microsoft': 1975, 'Sony': 1946}

Som vi ved, at keys() her i ordbog d er strenge, så vil sorteringen efter nøglen skabe en liste af tupler i alfabetisk rækkefølge i keys() for hvert element, og ved hjælp af dict()-funktionen dannes ordbogen. vi kan også bruge lambda-funktionen til at definere nøglen, hvilket er næsten unødvendigt, jeg har lige vist at lave en sammenligning i definitionen af nøglen i sortering.

Det er det. Besøg venligst min profil for at få flere historier om maskinlæring og dataanalyse. Enhver form for forslag og kritik er meget værdsat. Her er mine tidligere historier baseret på et Graduate kursus udbudt af Inha University, Rep of Korea:

Forrige historier:

Del-1: Grundlæggende python og installation
Del-2: Kapitel-2: Python Datastruktur – Datatype
Del-3: Kontrolanvisninger (Loops) i Python
Del:4: Python-funktioner&Moduler
Del:5: Del-6: Typerne & proceduren for maskinlæring
Del-7: Feature Engineering for Machine Learning

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.