Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Ordbokskomprehensioner | List- och Ordbokskomprehensioner
Python Loopar Handledning
Avsnitt 4. Kapitel 3
single

single

Ordbokskomprehensioner

Svep för att visa menyn

Ordförståelse ger ett kortfattat sätt att skapa ordböcker i Python, liknande listförståelse. De möjliggör omvandling av data till nyckel-värde-par på en enda kodrad.

I grunden låter en enkel ordförståelse dig konstruera en ny ordbok genom att tillämpa ett uttryck på varje nyckel-värde-par i en itererbar variabel.

{key_expression: value_expression for item in iterable}
  • key_expression: definierar nyckeln för varje nyckel-värde-par;
  • value_expression: definierar värdet som motsvarar nyckeln;
  • iterable: källan till objekt som ska bearbetas (t.ex. en lista, range eller annan itererbar).
Note
Notering

Till skillnad från listor kräver ordböcker både en nyckel och ett värde, separerade med ett kolon (:) och använder {} istället för [].

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)

Den här koden itererar genom listan travel_wishlist, där varje underlista innehåller en destination och dess budget. for-loopen tilldelar destinationen som nyckel och budgeten som värde 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)

Detta exempel använder dictionary comprehension för att uppnå samma resultat som det föregående exemplet. Varje destination blir en nyckel och dess motsvarande kostnad blir värdet i travel_budget-ordboken, allt på en enda rad.

Hantering av ValueError vid uppackning av objekt med fler än två element

Vid användning av dictionary comprehensions packar du ofta upp objekt från en iterable till variabler för nycklar och värden. Om varje objekt i din iterable innehåller fler än två element (till exempel en lista med [city, country, budget]), kommer ett försök att packa upp till endast två variabler att orsaka ett ValueError.

Till exempel, om du skriver:

{city: country for city, country in travel_wishlist}

och travel_wishlist innehåller underlistor med tre element, kommer Python att ge följande felmeddelande:

ValueError: too many values to unpack (expected 2)

Varför händer detta?

  • Python förväntar sig att packa upp exakt två värden (för city och country), men varje underlista har tre.
  • Denna skillnad gör att Python kastar ett ValueError, där det tydligt anges att fler värden tillhandahålls än väntat.

Hur kan du hantera detta?

  • Packa upp alla element, men använd bara de du behöver:

for city, country, budget in travel_wishlist — tilldela varje värde till en variabel.

  • Ignorera oanvända värden med ett understreck:

for city, country, _ in travel_wishlist — understrecket _ är en vanlig konvention för oanvända variabler.

  • Använd slicing för att välja element:

for city, country in [item[:2] for item in travel_wishlist] — skär varje underlista till de två första elementen innan uppackning.

Genom att matcha antalet variabler med antalet element i varje objekt, eller genom att ignorera oanvänd data, undviker du uppackningsfel och håller dina dictionary comprehensions rena och lättlästa.

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

Svep för att börja koda

En resenär vill organisera sin travel_wishlist genom att koppla varje stadsnamn till dess motsvarande land. För att göra detta effektivt behöver du omvandla datan till en ordbok.

  • Extrahera stadsnamn och deras motsvarande länder från travel_wishlist.
  • Spara den resulterande ordboken i city_to_country.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 3
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt