I denne veiledningen vil vi utforske hvordan du ordner innholdet i en Python-ordbok, enten det er etter nøkkel eller verdi.
Når du arbeider med ordbøker i Python, kan det oppstå behov for å sortere elementene basert på nøklene eller verdiene. Siden en Python-ordbok er strukturert som en nøkkel-verdi-mapping, vil du typisk generere en ny ordbok der enten nøklene eller verdiene er sortert i den rekkefølgen du ønsker.
Denne veiledningen starter med en gjennomgang av grunnleggende om Python-ordbøker. Deretter vil vi lære å lage en ny ordbok hvor innholdet er ordnet enten etter nøkkel eller verdi.
Repetisjon av Grunnleggende om Python-ordbøker
Hva er en Python-ordbok?
En ordbok er en innebygd datastruktur i Python, som lagrer informasjon som par av nøkler og verdier. Nøklene brukes for å hente de tilhørende verdiene. Nøklene må være unike da de identifiserer verdiene.
py_dict = {"Python":"kult!","Lær":True} py_dict["Python"] # Utdata: kult! py_dict["Lær"] # Utdata: True
I praksis ligner en ordbok på en hash-tabell. Det er ikke en struktur som garanterer en spesifikk rekkefølge. Du kan tilgå innholdet i ordboken i hvilken som helst rekkefølge, så lenge du kjenner nøklene.
Rekkefølge av Elementer i en Ordbok
I eldre Python-versjoner var det nødvendig å bruke en OrderedDict for å bevare rekkefølgen på nøklene. Men i Python 3.7 og nyere, vil elementene i en ordbok bli tilgjengelige i den rekkefølgen de ble lagt inn.
Nå som du har en forståelse av grunnleggende ordbokkonsepter i Python, la oss se på hvordan vi kan lage sorterte kopier av en ordbok.
⚙️ Merk: Du trenger Python 3.7 eller nyere for å få koden i denne veiledningen til å fungere som forventet. Du kan laste ned den siste versjonen av Python eller kjøre eksemplene i en online Python-editor.
Sortering av en Python-ordbok etter Nøkkel
La oss forestille oss en dessertmeny fra en kafé, organisert i to kolonner: en med navn på elementene og en med deres respektive priser.
Vi kan representere dette som en Python-ordbok, der navnene på elementene er nøklene og prisene er verdiene.
La oss lage en ordbok som representerer dessertene, som vist nedenfor.
desserts = { "Is":10, "Brownies":12, "Ostekake":3, "Sveitsisk rull":5, "Kjeks":4, "Cupcake":2 }
Vi vil nå generere en ny ordbok, `sortert_desserter`, hvor dessertene er ordnet alfabetisk. I den opprinnelige `desserts`-ordboken er navnene på dessertene nøklene. Derfor må vi sortere disse nøklene for å opprette den nye ordboken.
Hvordan få tilgang til nøklene i en Python-ordbok
Først henter vi nøklene fra ordboken, og deretter sorterer vi dem alfabetisk.
I Python kan vi bruke `.keys()`-metoden for å hente en liste over alle nøklene i ordboken.
La oss bruke `.keys()`-metoden på vår `desserts`-ordbok for å hente nøklene.
keys = desserts.keys() print(keys) # Utdata ['Is', 'Brownies', 'Ostekake', 'Sveitsisk rull', 'Kjeks', 'Cupcake']
Python sin innebygde funksjon `sorted()` tar en liste som argument og returnerer en ny, sortert liste.
La oss kalle `sorted()` med listen over nøkler som argument, og lagre resultatet i variabelen `sorted_keys`.
sorted_keys = sorted(keys) print(sorted_keys) # Utdata ['Brownies', 'Cupcake', 'Is', 'Kjeks', 'Ostekake', 'Sveitsisk rull']
Nå som vi har sortert nøklene alfabetisk, kan vi slå opp verdiene som hører til disse nøklene fra den opprinnelige `desserts`-ordboken.
sorted_desserts = {} for key in sorted_keys: sorted_desserts[key] = desserts[key] print(sorted_desserts) # Utdata {'Brownies': 12, 'Cupcake': 2, 'Is': 10, 'Kjeks': 4, 'Ostekake': 3, 'Sveitsisk rull': 5}
La oss se nærmere på koden ovenfor:
- Vi initialiserer `sorted_desserts` som en tom Python-ordbok.
- Vi går gjennom listen `sorted_keys`.
- For hver nøkkel i `sorted_keys` legger vi til en ny oppføring i `sorted_desserts` ved å slå opp den korresponderende verdien i `desserts`-ordboken.
Å bruke en `for`-løkke på denne måten anses som litt omstendelig. Python tilbyr en mer kompakt metode ved hjelp av ordbokforståelse.
Ordbokforståelse i Python
Python støtter ordbokforståelse, på samme måte som listeforståelse. Ordbokforståelse lar deg opprette en ny ordbok med bare en linje kode.
▶️ Her er den generelle strukturen for å bruke ordbokforståelse i Python.
# 1. Når du har både nøkler og verdier i to lister: list1, list2 ny_dict = {key:value for key,value in zip(list1,list2)} # 2. Når du har nøklene og kan slå opp verdiene ny_dict = {key:value for key in <iterable>}
Vi bruker det andre formatet over: `ny_dict = {key:value for key in
I dette eksemplet:
- iterable: listen `sorted_keys`
- key: nøkkelen vi får tilgang til ved å gå gjennom `sorted_keys`
- value: verdien vi slår opp ved å bruke nøkkelen i `desserts`-ordboken, `desserts[key]`
Dette gir oss følgende uttrykk for ordbokforståelse.
sorted_desserts = {key:desserts[key] for key in sorted_keys} print(sorted_desserts) {'Brownies': 12, 'Cupcake': 2, 'Is': 10, 'Kjeks': 4, 'Ostekake': 3, 'Sveitsisk rull': 5}
Som vi kan se fra utdataene, er dessertene nå sortert alfabetisk i den nye ordboken `sorted_desserts`.
Sortering av en Python-ordbok etter Verdi
La oss nå se på hvordan vi kan sortere en Python-ordbok etter verdiene.
I vår `desserts`-ordbok representerer verdiene prisen på hver dessert. Du kan ønske å sortere ordboken etter disse prisene, enten stigende eller synkende.
▶️ Du kan bruke den innebygde metoden `.items()` for å hente alle nøkkel-verdi-parene. Hver tuppel representerer et nøkkel-verdi-par.
desserts.items() # Utdata dict_items([('Is', 10), ('Brownies', 12), ('Ostekake', 3), ('Sveitsisk rull', 5), ('Kjeks', 4), ('Cupcake', 2)])
Hvert element er en tuppel. Du kan indeksere hvert par for å få tilgang til nøklene og verdiene separat.
dict_items = desserts.items() for item in dict_items: print(f"key:{item[0]}, value:{item[1]}") # Utdata key:Is,value:10 key:Brownies,value:12 key:Ostekake,value:3 key:Sveitsisk rull,value:5 key:Kjeks,value:4 key:Cupcake,value:2
Siden vi ønsker å sortere etter verdier, kan vi bruke metoden over for å hente verdien ved index 1 i hvert par.
Sortering av Verdiene i en Python-ordbok i Stigende Rekkefølge
Denne gangen bruker vi `sorted()`-funksjonen sammen med den valgfrie `key`-parameteren. Denne parameteren kan være en hvilken som helst Python-funksjon, en innebygd funksjon, en brukerdefinert funksjon, eller en lambda-funksjon.
Merk: `lambda args: uttrykk` er syntaksen for å definere lambda-funksjoner i Python.
I dette tilfellet med sortering av desserter etter pris, har vi tilgang til ordbokselementer (nøkkel-verdi-par). Vi setter `key = lambda item: item[1]` siden vi vil sortere etter verdi (pris).
Siden `sorted()` returnerer en liste som standard, må du eksplisitt caste den til en `dict`, som vist nedenfor.
sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1])) print(sorted_desserts) # Utdata {'Cupcake': 2, 'Ostekake': 3, 'Kjeks': 4, 'Sveitsisk rull': 5, 'Is': 10, 'Brownies': 12}
Du kan også skrive om dette ved hjelp av ordbokforståelse, som vi har sett tidligere.
sorted_desserts = {key:value for key, value in sorted(desserts.items(), key=lambda item:item[1])} print(sorted_desserts) # Utdata {'Cupcake': 2, 'Ostekake': 3, 'Kjeks': 4, 'Sveitsisk rull': 5, 'Is': 10, 'Brownies': 12}
I `sorted_desserts` er `Cupcake` med en pris på 2 det første elementet, og `Brownies` med en pris på 12 er det siste elementet.
Sortering av Verdiene i en Python-ordbok i Synkende Rekkefølge
Dersom du ønsker å sortere prisene i synkende rekkefølge, kan du sette den valgfrie `reverse`-parameteren til `True`.
sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], reverse=True)) print(sorted_desserts) # Utdata {'Brownies': 12, 'Is': 10, 'Sveitsisk rull': 5, 'Kjeks': 4, 'Ostekake': 3, 'Cupcake': 2}
Nå er `sorted_desserts` sortert i synkende rekkefølge basert på pris, og begynner med den dyreste desserten `Brownies` til 12.
Oppsummering 👩🏽💻
La oss oppsummere hva vi har lært i denne veiledningen.
- En Python-ordbok lagrer data i form av nøkkel-verdi-par; alle nøklene må være unike.
- Når vi sorterer en ordbok etter nøkkel eller verdi, lager vi en ny ordbok som er sortert etter vårt behov.
- Du kan bruke de innebygde metodene `.keys()` og `.items()` for å hente henholdsvis alle nøklene eller alle nøkkel-verdi-parene.
- Du kan bruke `sorted()`-funksjonen sammen med den valgfrie parameteren `key` og `reverse` for å oppnå ønsket sortering.
Nå som du har lært å sortere en Python-ordbok, kan du utforske hvordan du sorterer lister i Python. Lykke til med programmeringen!🎉