Sådan sorteres en Python-ordbog efter nøgle eller værdi

I denne øvelse lærer du, hvordan du sorterer en Python-ordbog efter dens nøgle eller værdi.

Når du arbejder med en ordbog i Python, er der tidspunkter, hvor du bliver nødt til at sortere dens indhold – efter nøgle eller værdi. Da en Python-ordbog er en nøgleværdi-mapping, vil du oprette en ny ordbog, der har nøglerne eller værdierne sorteret efter behov.

I denne tutorial starter vi med at gennemgå det grundlæggende i Python-ordbogen. Vi lærer derefter at oprette en ny ordbog, hvor indholdet er sorteret efter nøgle eller værdi efter behov.

Python Dictionary Basics, Revisited

Hvad er en Python-ordbog?

Ordbog er en indbygget datastruktur i Python. Den gemmer varer som nøgleværdi-par. Du kan bruge tasterne til at slå de tilsvarende værdier op. Da tasterne unikt identificerer værdierne, bør der ikke være gentagelse af nøgler.

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

py_dict["Learn"]
# Output: True

Funktionelt ligner en ordbog et hash-kort. Derfor er det ikke nødvendigvis en ordnet datastruktur. Du kan få adgang til indholdet af en ordbog i enhver vilkårlig rækkefølge, så længe du kender nøglerne.

Ordning af genstande i en ordbog

I tidligere versioner af Python skulle du bruge en BestiltDict for at bevare nøglerækkefølgen. Fra Python 3.7 kan du dog få adgang til emnerne i samme rækkefølge, som du tilføjer dem til ordbogen.

Nu hvor du har lært det grundlæggende i Python-ordbøger, lad os lære, hvordan du opretter sorterede kopier af ordbogen.

⚙️ Bemærk: Du skal have Python 3.7 eller nyere for at koden i denne vejledning fungerer som forventet. Du kan downloade nyeste version af Pythoneller kør eksemplerne i toadmin.dk Online Python Editor.

  Vælg Google Workspace til e-mail og samarbejde

Sådan sorteres en Python-ordbog efter nøgle

Se på følgende billede af dessertmenuen på en café. Der er to kolonner svarende til emnerne på menuen og deres respektive priser.

Du kan repræsentere dette i form af en Python-ordbog ved at samle navnene på elementer som nøgler og deres priser som værdier.

Lad os gå videre og lave ordbogsdesserterne, som vist nedenfor.

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

Lad os derefter oprette en ordbog sorterede_desserter, hvor desserterne er arrangeret i alfabetisk rækkefølge. I den originale dessertordbog er navnene på desserterne nøglerne. Så du bør sortere disse nøgler i alfabetisk rækkefølge for at oprette en ny ordbog.

Sådan får du adgang til nøglerne til en Python-ordbog

For at gøre dette får vi først nøglerne til ordbogen og sorterer dem derefter i alfabetisk rækkefølge.

I Python kan du bruge den indbyggede ordbogsmetode .keys() for at få en liste over alle nøglerne i ordbogen.

Lad os kalde .keys()-metoden i dessertordbogen for at hente nøglerne, som vist nedenfor.

keys = desserts.keys()
print(keys)

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

Kaldning af Pythons indbyggede sorted() funktion med en liste som argument returnerer en ny sorteret liste.

Lad os derefter kalde funktionen sorted() med listetasterne som argument og gemme den sorterede liste i variablen sorted_keys.

sorted_keys = sorted(keys)
print(sorted_keys)

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

Nu hvor vi har nøglerne sorteret i alfabetisk rækkefølge, kan vi slå de værdier op, der svarer til nøglerne i sorted_keys fra dessertordbogen, 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}

Lad os udvide på ovenstående kodeblok:

  • Initialiser sorted_desserts til at være en tom Python-ordbog.
  • Gå gennem nøglelisten sorted_keys.
  • For hver nøgle i sorted_keys skal du tilføje en post til sorted_desserts ved at slå den tilsvarende værdi op i dessertordbogen.
  15 Platform til at lære nye færdigheder inden for informationsteknologi

Brug af for-løkken på denne måde betragtes som verbose. I Python er der et mere kortfattet alternativ ved hjælp af ordbogsforståelse.

Ordbogsforståelse i Python

Python understøtter brugen af ​​ordbogsforståelse, svarende til listeforståelse. Ordbogsforståelse lader dig oprette en ny Python-ordbog med kun én linje kode.

▶️ Her er den generelle konstruktion til at bruge ordbogsforstå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>}

Lad os bruge den anden konstruktion i ovenstående celle: new_dict = {key:value for key in } til at skabe en sorteret_desserter-ordbog.

I dette eksempel:

  • iterable: listen sorted_keys
  • key: nøglen, som vi får adgang til ved at gå gennem sorted_keys
  • værdi: slå op på den værdi, der svarer til nøglen fra dessertordbogen, desserter[key]

Når vi sætter det hele sammen, har vi udtrykket for ordbogsforstå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 ovenstående output er desserterne arrangeret i alfabetisk rækkefølge i ordbogen sorterede_desserter.

Sådan sorteres en Python-ordbog efter værdi

Dernæst lærer vi, hvordan man sorterer en Python-ordbog efter dens værdier.

I dessertordbogen svarer værdierne til priserne på desserterne. Du vil måske sortere ordbogen efter priser, enten i stigende eller faldende rækkefølge.

▶️ Du kan bruge den indbyggede ordbogsmetode .items() til at få alle nøgleværdi-parrene. Hver tupel er et nøgleværdi-par.

desserts.items()

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

Hver af genstandene er en tupel i sig selv. Så du kan også indeksere i hvert nøgle-værdi-par for at få adgang til nøglerne og værdierne 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

Da vi gerne vil sortere efter værdier, bruger vi ovenstående metode til at få værdien ved indeks 1 i nøgleværdi-parret.

  Sådan opretter du et brugerdefineret farvetema til Firefox

Sådan sorteres værdierne af en Python-ordbog i stigende rækkefølge

Denne gang bruger vi funktionen sorted() sammen med den valgfrie nøgleparameter. nøgle kan være enhver Python-funktion, en indbygget funktion, en brugerdefineret funktion eller endda en lambda funktion.

Bemærk: lambda args: udtryk er syntaksen til at definere lambda-funktioner i Python.

I dette eksempel på sortering af desserter efter pris har vi adgang til ordbogsartikler (nøgleværdi-par). Vi indstiller nøgle = lambda vare:vare[1] da vi gerne vil sortere efter værdien (prisen).

Da sorted()-funktionen returnerer en liste som standard, bør du udtrykkeligt 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å omskrive vha ordbogsforståelsesom diskuteret 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 til en pris af $2 den første vare, og Brownies til en pris af $12 er den sidste vare.

Sådan sorteres værdierne af en Python-ordbog i faldende rækkefølge

Hvis du gerne vil sortere priserne i faldende rækkefølge, kan du indstille den valgfri omvendte parameter til Sand, som forklaret 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}

Nu er sorted_desserts blevet sorteret i den faldende rækkefølge af priser, startende med den dyreste dessert Brownies, der koster $12.

Afslutning 👩🏽‍💻

Lad os hurtigt opsummere alt det, vi har lært i denne øvelse.

  • En Python-ordbog gemmer data i nøgleværdi-par; nøglerne skal alle være unikke.
  • I processen med at sortere en ordbog efter nøgle eller værdi, opretter vi en ny ordbog, der sorteres efter behov.
  • Du kan bruge de indbyggede ordbogsmetoder, .keys() og .items() til at hente henholdsvis alle nøgler og nøgleværdi-par.
  • Du kan bruge funktionen sorted() sammen med den valgfrie parametertast og omvendt for at opnå den ønskede sortering.

Nu hvor du har lært at sortere en Python-ordbog, så lær at sortere Python-lister. God kodning!🎉