Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Ordbokforståelser | Liste- og Ordbokforståelser
Python Løkker Veiledning
Seksjon 4. Kapittel 3
single

single

Ordbokforståelser

Sveip for å vise menyen

Ordforkortelser gir en kortfattet måte å lage ordbøker i Python på, likt som listeforkortelser. De gjør det mulig å omforme data til nøkkel-verdi-par på én linje kode.

I sin kjerne lar en grunnleggende ordbokforkortelse deg konstruere en ny ordbok ved å bruke et uttrykk på hvert nøkkel-verdi-par i en itererbar variabel.

{key_expression: value_expression for item in iterable}
  • key_expression: definerer nøkkelen for hvert nøkkel-verdi-par;
  • value_expression: definerer verdien som tilsvarer nøkkelen;
  • iterable: kilden til elementene som skal behandles (f.eks. en liste, range eller en annen itererbar).
Note
Merk

I motsetning til lister krever ordbøker både en nøkkel og en verdi, adskilt med kolon (:), og bruker {} 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 koden itererer gjennom listen travel_wishlist, hvor hver underliste inneholder et reisemål og et budsjett. for-løkka tildeler reisemålet som nøkkel og budsjettet som verdi i ordboken 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 eksemplet bruker dictionary comprehension for å oppnå samme resultat som forrige eksempel. Hver destinasjon blir en nøkkel, og den tilhørende kostnaden blir verdien i travel_budget-ordboken, alt på én linje.

Håndtering av ValueError ved oppakking av elementer med mer enn to verdier

Ved bruk av dictionary comprehensions pakkes ofte elementer fra en itererbar inn i variabler for nøkler og verdier. Hvis hvert element i den itererbare inneholder mer enn to verdier (for eksempel en liste med [city, country, budget]), vil et forsøk på å pakke ut til kun to variabler føre til en ValueError.

For eksempel, hvis du skriver:

{city: country for city, country in travel_wishlist}

og travel_wishlist inneholder underlister med tre elementer, vil Python gi følgende feil:

ValueError: too many values to unpack (expected 2)

Hvorfor skjer dette?

  • Python forventer å pakke ut nøyaktig to verdier (for city og country), men hver underliste har tre.
  • Dette misforholdet gjør at Python kaster en ValueError, og tydelig sier at det gis flere verdier enn forventet.

Hvordan kan dette håndteres?

  • Pakk ut alle elementene, men bruk kun de du trenger:

for city, country, budget in travel_wishlist — tildel hver verdi til en variabel.

  • Ignorer ubrukte verdier med en understrek:

for city, country, _ in travel_wishlist — understrek _ er en vanlig konvensjon for ubrukte variabler.

  • Bruk slicing for å velge elementer:

for city, country in [item[:2] for item in travel_wishlist] — skjær ut de to første elementene i hver underliste før oppakking.

Ved å matche antall variabler med antall elementer i hvert element, eller ved å ignorere ubrukte data, unngås oppakkingsfeil og dictionary comprehensions blir ryddige og lesbare.

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)
Oppgave

Sveip for å begynne å kode

En reisende ønsker å organisere sin travel_wishlist ved å knytte hvert bynavn til sitt tilhørende land. For å gjøre dette effektivt, må du omforme dataene til en ordbok.

  • Ekstraher bynavn og tilhørende land fra travel_wishlist.
  • Lagre den resulterende ordboken i city_to_country.

Løsning

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

some-alt