Hvordan sortere en Python-ordbok etter nøkkel eller verdi

I denne opplæringen lærer du hvordan du sorterer en Python-ordbok etter nøkkel eller verdi.

Når du arbeider med en ordbok i Python, er det tider når du må sortere innholdet – etter nøkkel eller verdi. Ettersom en Python-ordbok er en nøkkelverdi-kartlegging, vil du opprette en ny ordbok som har nøklene eller verdiene sortert etter behov.

I denne opplæringen starter vi med å gjennomgå det grunnleggende om Python-ordboken. Vi lærer deretter å lage en ny ordbok der innholdet er sortert etter nøkkel eller verdi, etter behov.

Python Dictionary Basics, Revisited

Hva er en Python-ordbok?

Ordbok er en innebygd datastruktur i Python. Den lagrer varer som nøkkelverdi-par. Du kan bruke tastene til å slå opp de tilsvarende verdiene. Siden nøklene identifiserer verdiene unikt, bør det ikke være repetisjon av nøkler.

py_dict = {"Python":"cool!","Learn":True}
py_dict["Python"]
# Output: cool!

py_dict["Learn"]
# Output: True

Funksjonelt ligner en ordbok på et hash-kart. Derfor er det ikke nødvendigvis en ordnet datastruktur. Du kan få tilgang til innholdet i en ordbok i hvilken som helst vilkårlig rekkefølge, så lenge du kjenner nøklene.

Bestilling av varer i en ordbok

I tidligere versjoner av Python måtte du bruke en BestiltDict for å bevare nøklenes rekkefølge. Fra Python 3.7 kan du imidlertid få tilgang til elementene i samme rekkefølge som du legger dem til i ordboken.

Nå som du har lært det grunnleggende om Python-ordbøker, la oss lære hvordan du lager sorterte kopier av ordboken.

⚙️ Merk: Du må ha Python 3.7 eller nyere for at koden i denne opplæringen skal fungere som forventet. Du kan laste ned siste versjon av Pythoneller kjør eksemplene i tipsbilk.net Online Python Editor.

  4 beste programvare for videotekstgenerator med flerspråklig støtte

Hvordan sortere en Python-ordbok etter nøkkel

Se på følgende bilde av dessertmenyen på en kafé. Det er to kolonner som tilsvarer elementene på menyen og deres respektive priser.

Du kan representere dette i form av en Python-ordbok ved å samle inn navnene på elementer som nøkler og prisene deres som verdier.

La oss gå videre og lage ordbokdessertene, som vist nedenfor.

desserts = {
    "Ice cream":10,
    "Brownies":12,
    "Cheesecake":3,
    "Swiss roll":5,
    "Cookies":4,
    "Cup cake":2
}

La oss deretter lage en ordbok sortert_desserter, der dessertene er ordnet i alfabetisk rekkefølge. I den originale dessertordboken er navnene på dessertene nøklene. Så du bør sortere disse nøklene i alfabetisk rekkefølge for å lage en ny ordbok.

Hvordan få tilgang til nøklene til en Python-ordbok

For å gjøre dette får vi først nøklene til ordboken og sorterer dem deretter i alfabetisk rekkefølge.

I Python kan du bruke den innebygde ordbokmetoden .keys() for å få en liste over alle nøklene i ordboken.

La oss kalle .keys()-metoden i dessertordboken for å hente nøklene, som vist nedenfor.

keys = desserts.keys()
print(keys)

#Output
['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 
'Cup cake']

Å kalle Pythons innebygde sorted() funksjon med en liste som argument returnerer en ny sortert liste.

La oss deretter kalle sorted()-funksjonen med listetastene som argument og lagre den sorterte listen i variabelen sorted_keys.

sorted_keys = sorted(keys)
print(sorted_keys)

# Output
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']

Nå som vi har nøklene sortert i alfabetisk rekkefølge, kan vi slå opp verdiene som tilsvarer nøklene i sorted_keys fra dessertordboken, som vist nedenfor.

sorted_desserts = {}
for key in sorted_keys:
  sorted_desserts[key] = desserts[key]

print(sorted_desserts)

# Output
{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

La oss utvide på kodeblokken ovenfor:

  • Initialiser sorted_desserts til å være en tom Python-ordbok.
  • Gå gjennom tastelisten sorted_keys.
  • For hver nøkkel i sorted_keys, legg til en oppføring i sorted_desserts ved å slå opp den tilsvarende verdien i dessertordboken.
  Har Xbox Mario Kart?

Å bruke for-løkken som dette betraktes som ordrik. I Python er det et mer kortfattet alternativ ved å bruke ordbokforståelse.

Ordbokforståelse i Python

Python støtter bruken av ordbokforståelse, lik listeforståelse. Ordbokforståelse lar deg lage en ny Python-ordbok med bare én kodelinje.

▶️ Her er den generelle konstruksjonen for å bruke ordbokforståelse i Python.

# 1. when you have both keys and values in two lists: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. when you have the keys, and can look up the values
new_dict = {key:value for key in <iterable>}

La oss bruke den andre konstruksjonen i cellen ovenfor: new_dict = {key:value for key in } for å lage en sortert_dessert-ordbok.

I dette eksemplet:

  • iterable: listen sorted_keys
  • key: nøkkelen som vi får tilgang til ved å gå gjennom sorted_keys
  • verdi: slå opp verdien som tilsvarer nøkkelen fra dessertordboken, desserter[key]

Setter vi det hele sammen, har vi uttrykket for ordbokforståelse, som vist nedenfor.

sorted_desserts = {key:desserts[key] for key in sorted_keys}
print(sorted_desserts)

{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Fra utgangen ovenfor er dessertene ordnet i alfabetisk rekkefølge i sortert_dessert-ordboken.

Hvordan sortere en Python-ordbok etter verdi

Deretter lærer vi hvordan du sorterer en Python-ordbok etter verdiene.

I dessertordboken tilsvarer verdiene prisene på dessertene. Det kan være lurt å sortere ordboken etter priser, enten i økende eller synkende rekkefølge.

▶️ Du kan bruke den innebygde ordbokmetoden .items() for å få alle nøkkelverdi-parene. Hver tuppel er et nøkkelverdi-par.

desserts.items()

dict_items([('Ice cream', 10), ('Brownies', 12), ('Cheesecake', 3), 
('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])

Hver av gjenstandene er en tuppel i seg selv. Så du kan også indeksere inn i hvert nøkkelverdi-par for å få tilgang til nøklene og verdiene individuelt.

dict_items = desserts.items()
for item in dict_items:
  print(f"key:{item[0]},value:{item[1]}")

# Output
key:Ice cream,value:10
key:Brownies,value:12
key:Cheesecake,value:3
key:Swiss roll,value:5
key:Cookies,value:4
key:Cup cake,value:2

Siden vi ønsker å sortere etter verdier, bruker vi metoden ovenfor for å få verdien ved indeks 1 i nøkkelverdi-paret.

  Rett opp feilkode Beaver i Destiny

Hvordan sortere verdiene til en Python-ordbok i økende rekkefølge

Denne gangen bruker vi sortert()-funksjonen sammen med den valgfrie nøkkelparameteren. nøkkel kan være en hvilken som helst Python-funksjon, en innebygd funksjon, en brukerdefinert funksjon eller til og med en lambda funksjon.

Merk: lambda args: uttrykk er syntaksen for å definere lambda-funksjoner i Python.

I dette eksemplet med sortering av desserter etter pris, har vi tilgang til ordbokartikler (nøkkelverdi-par). Vi setter nøkkel = lambda element:vare[1] som vi ønsker å sortere etter verdi (pris).

Siden sorted()-funksjonen returnerer en liste som standard, bør du eksplisitt caste den til en dict, som vist nedenfor.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1]))
print(sorted_desserts)

{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Du kan også skrive om ved å bruke ordbokforståelsesom diskutert tidligere.

sorted_desserts = {key:value for key, value in sorted(desserts.items(), 
key=lambda item:item[1])}

print(sorted_desserts)

# Output
{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

I sorted_desserts er Cup Cake priset til $2 den første varen og Brownies priset til $12 er den siste varen.

Hvordan sortere verdiene til en Python-ordbok i synkende rekkefølge

Hvis du vil sortere prisene i synkende rekkefølge, kan du sette den valgfrie reversparameteren til True, som forklart nedenfor.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], 
reverse=True))
print(sorted_desserts)

# Output
{'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 
'Cheesecake': 3, 'Cup cake': 2}

Nå har sorted_desserts blitt sortert i synkende rekkefølge av priser, og starter med den dyreste desserten Brownies som koster $12.

Avslutning 👩🏽‍💻

La oss raskt oppsummere alt vi har lært i denne opplæringen.

  • En Python-ordbok lagrer data i nøkkelverdi-par; nøklene skal alle være unike.
  • I prosessen med å sortere en ordbok etter nøkkel eller verdi, lager vi en ny ordbok som sorteres etter behov.
  • Du kan bruke de innebygde ordbokmetodene, .keys() og .items() for å hente henholdsvis alle nøkler og nøkkelverdi-par.
  • Du kan bruke sortert()-funksjonen sammen med den valgfrie parametertasten og reversere for å oppnå ønsket sortering.

Nå som du har lært hvordan du sorterer en Python-ordbok, lær deg å sortere Python-lister. Lykke til med koding!🎉