single
Woordenboek-Comprehensies
Veeg om het menu te tonen
Dictionary-comprehensies bieden een beknopte manier om woordenboeken in Python te maken, vergelijkbaar met lijst-comprehensies. Hiermee kan data worden omgezet in sleutel-waardeparen in één regel code.
In de kern stelt een basis dictionary-comprehensie je in staat om een nieuw woordenboek te construeren door een expressie toe te passen op elk sleutel-waardepaar in een iterabele variabele.
{key_expression: value_expression for item in iterable}
key_expression: definieert de sleutel voor elk sleutel-waardepaar;value_expression: definieert de waarde die bij de sleutel hoort;iterable: de bron van items die verwerkt worden (bijvoorbeeld een lijst, range of een andere iterabele).
In tegenstelling tot lijsten vereisen woordenboeken zowel een sleutel als een waarde, gescheiden door een dubbele punt (:), en gebruiken ze {} in plaats van [].
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)
Deze code doorloopt de lijst travel_wishlist, waarbij elke sublijst een bestemming en het bijbehorende budget bevat. De for-lus wijst de bestemming toe als sleutel en het budget als waarde in het woordenboek 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)
Dit voorbeeld gebruikt dictionary comprehension om hetzelfde resultaat te bereiken als het vorige voorbeeld. Elke bestemming wordt een sleutel en de bijbehorende kosten worden de waarde in de travel_budget dictionary, allemaal in één regel.
ValueError afhandelen bij het uitpakken van items met meer dan twee elementen
Bij het gebruik van dictionary comprehensions pak je vaak items uit een iterabele in variabelen voor sleutels en waarden. Als elk item in je iterabele meer dan twee elementen bevat (zoals een lijst van [city, country, budget]), zal het proberen uit te pakken in slechts twee variabelen een ValueError veroorzaken.
Bijvoorbeeld, als je schrijft:
{city: country for city, country in travel_wishlist}
en travel_wishlist bevat sublijsten met drie elementen, zal Python deze foutmelding geven:
ValueError: too many values to unpack (expected 2)
Waarom gebeurt dit?
- Python verwacht precies twee waarden uit te pakken (voor
cityencountry), maar elke sublijst heeft er drie. - Deze mismatch zorgt ervoor dat Python een ValueError geeft, waarin duidelijk staat dat er meer waarden worden aangeboden dan verwacht.
Hoe kun je dit oplossen?
- Pak alle elementen uit, maar gebruik alleen wat je nodig hebt:
for city, country, budget in travel_wishlist — wijs elke waarde toe aan een variabele.
- Negeer ongebruikte waarden met een underscore:
for city, country, _ in travel_wishlist — de underscore _ is een gangbare conventie voor ongebruikte variabelen.
- Gebruik slicing om elementen te selecteren:
for city, country in [item[:2] for item in travel_wishlist] — snijd elke sublijst tot de eerste twee elementen voordat je uitpakt.
Door het aantal variabelen te laten overeenkomen met het aantal elementen in elk item, of door ongebruikte data te negeren, voorkom je unpacking-fouten en blijven je dictionary comprehensions overzichtelijk en leesbaar.
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)
Veeg om te beginnen met coderen
Een reiziger wil zijn travel_wishlist organiseren door elke stadsnaam te koppelen aan het bijbehorende land. Om dit efficiënt te doen, moet je de gegevens omzetten in een dictionary.
- Extraheer stadsnamen en hun bijbehorende landen uit
travel_wishlist. - Sla het resulterende woordenboek op in
city_to_country.
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.