Sorter Python-ordbok: Nøkkel & Verdi – Guide for Nybegynnere

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 }` til å lage en sortert dessertordbok.

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!🎉