Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Ordbogsforståelser | Liste- og Ordbogsforståelser
Python Loops Tutorial
Sektion 4. Kapitel 3
single

single

Ordbogsforståelser

Stryg for at vise menuen

Ordbogsforståelser giver en kortfattet måde at oprette ordbøger i Python på, svarende til listeforståelser. De gør det muligt at omdanne data til nøgle-værdi-par på én linje kode.

Grundlæggende gør en ordbogsforståelse det muligt at konstruere en ny ordbog ved at anvende et udtryk på hvert nøgle-værdi-par i en itererbar variabel.

{key_expression: value_expression for item in iterable}
  • key_expression: definerer nøglen for hvert nøgle-værdi-par;
  • value_expression: definerer værdien, der svarer til nøglen;
  • iterable: kilden til elementer, der skal behandles (f.eks. en liste, range eller en anden itererbar).
Note
Bemærk

I modsætning til lister kræver ordbøger både en nøgle og en værdi, adskilt af et kolon (:), og bruger {} i stedet for [].

12345678910111213141516
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Initialize an empty dictionary travel_budget = {} # Populate the dictionary using a for loop for destination, cost in travel_wishlist: travel_budget[destination] = cost print(travel_budget)

Denne kode itererer gennem listen travel_wishlist, hvor hver underliste indeholder en destination og dens budget. for-løkken tildeler destinationen som nøgle og budgettet som værdi i ordbogen travel_budget.

123456789101112
travel_wishlist = [ ['Paris', 2000], ['Tokyo', 3000], ['New York', 2500], ['Kyoto', 1500], ['Sydney', 4000] ] # Create the dictionary using dictionary comprehension travel_budget = {destination: cost for destination, cost in travel_wishlist} print(travel_budget)

Dette eksempel bruger dictionary comprehension til at opnå det samme resultat som det forrige eksempel. Hver destination bliver en nøgle, og den tilsvarende pris bliver værdien i travel_budget-ordbogen, alt sammen på én linje.

Håndtering af ValueError ved udpakning af elementer med mere end to værdier

Ved brug af dictionary comprehensions udpakkes ofte elementer fra en iterabel til variabler for nøgler og værdier. Hvis hvert element i din iterabel indeholder mere end to værdier (for eksempel en liste med [city, country, budget]), vil et forsøg på at udpakke til kun to variabler forårsage en ValueError.

For eksempel, hvis du skriver:

{city: country for city, country in travel_wishlist}

og travel_wishlist indeholder underlister med tre elementer, vil Python give denne fejl:

ValueError: too many values to unpack (expected 2)

Hvorfor sker dette?

  • Python forventer at udpakke præcis to værdier (for city og country), men hver underliste har tre.
  • Denne uoverensstemmelse får Python til at kaste en ValueError, som tydeligt angiver, at der gives flere værdier end forventet.

Hvordan kan dette håndteres?

  • Udpak alle elementer, men brug kun de nødvendige:

for city, country, budget in travel_wishlist — tildel hver værdi til en variabel.

  • Ignorér ubrugte værdier med en underscore:

for city, country, _ in travel_wishlist — underscore _ er en almindelig konvention for ubrugte variabler.

  • Brug slicing til at vælge elementer:

for city, country in [item[:2] for item in travel_wishlist] — slice hver underliste til de første to elementer før udpakning.

Ved at matche antallet af variabler med antallet af elementer i hvert element, eller ved at ignorere ubrugte data, undgås udpakningsfejl, og dictionary comprehensions forbliver overskuelige og læsbare.

1234567891011121314151617181920
# Example data: each tuple has three elements (city, country, budget) travel_wishlist = [ ("Paris", "France", 2000), ("Tokyo", "Japan", 3000), ("New York", "USA", 2500) ] # Attempting to unpack only two variables (incorrect) try: city_to_country = {city: country for city, country in travel_wishlist} except ValueError as e: print("Error:", e) # Correct: unpack all elements, using underscore for unused value city_to_country = {city: country for city, country, _ in travel_wishlist} print("Handled with underscore:", city_to_country) # Correct: use slicing to select only needed elements city_to_country = {item[0]: item[1] for item in travel_wishlist} print("Handled with slicing:", city_to_country)
Opgave

Swipe to start coding

En rejsende ønsker at organisere deres travel_wishlist ved at kortlægge hvert bynavn til det tilsvarende land. For at gøre dette effektivt skal du omdanne dataene til en ordbog.

  • Udtræk bynavne og deres tilsvarende lande fra travel_wishlist.
  • Gem den resulterende ordbog i city_to_country.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 3
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

some-alt