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).
I motsetning til lister krever ordbøker både en nøkkel og en verdi, adskilt med kolon (:), og bruker {} i stedet for [].
12345678910111213141516travel_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.
123456789101112travel_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
cityogcountry), 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)
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
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår