single
Comprensioni di Dizionari
Scorri per mostrare il menu
Le comprensioni di dizionario offrono un modo conciso per creare dizionari in Python, simile alle comprensioni di lista. Consentono di trasformare i dati in coppie chiave-valore in una sola riga di codice.
Fondamentalmente, una comprensione di dizionario di base permette di costruire un nuovo dizionario applicando un'espressione a ciascuna coppia chiave-valore in una variabile iterabile.
{key_expression: value_expression for item in iterable}
key_expression: definisce la chiave per ogni coppia chiave-valore;value_expression: definisce il valore corrispondente alla chiave;iterable: la sorgente degli elementi da elaborare (ad esempio, una lista, un range o un altro iterabile).
A differenza delle liste, i dizionari richiedono sia una chiave che un valore, separati da due punti (:) e utilizzano {} invece di [].
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)
Questo codice itera attraverso la lista travel_wishlist, dove ogni sotto-lista contiene una destinazione e il relativo budget. Il ciclo for assegna la destinazione come chiave e il budget come valore nel dizionario 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)
Questo esempio utilizza una comprensione del dizionario per ottenere lo stesso risultato dell'esempio precedente. Ogni destinazione diventa una chiave e il relativo costo diventa il valore nel dizionario travel_budget, tutto in un'unica riga.
Gestione di ValueError durante l'unpacking di elementi con più di due valori
Quando si utilizzano le dictionary comprehensions, spesso si effettua l'unpacking degli elementi di un iterabile in variabili per chiavi e valori. Se ogni elemento dell'iterabile contiene più di due elementi (ad esempio una lista di [city, country, budget]), tentare di effettuare l'unpacking in sole due variabili causerà un ValueError.
Ad esempio, se si scrive:
{city: country for city, country in travel_wishlist}
e travel_wishlist contiene sotto-liste con tre elementi, Python genererà questo errore:
ValueError: too many values to unpack (expected 2)
Perché accade questo?
- Python si aspetta di effettuare l'unpacking di esattamente due valori (per
cityecountry), ma ogni sotto-lista ne ha tre. - Questa discrepanza porta Python a generare un ValueError, indicando chiaramente che vengono forniti più valori del previsto.
Come si può gestire questa situazione?
- Effettuare l'unpacking di tutti gli elementi, utilizzando solo quelli necessari:
for city, country, budget in travel_wishlist — assegnare ogni valore a una variabile.
- Ignorare i valori non utilizzati con un underscore:
for city, country, _ in travel_wishlist — l'underscore _ è una convenzione comune per le variabili non utilizzate.
- Utilizzare lo slicing per selezionare gli elementi:
for city, country in [item[:2] for item in travel_wishlist] — effettuare lo slicing di ogni sotto-lista ai primi due elementi prima dell'unpacking.
Abbinando il numero di variabili al numero di elementi in ciascun elemento, oppure ignorando i dati non necessari, si evitano errori di unpacking e si mantengono le dictionary comprehensions chiare e leggibili.
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)
Scorri per iniziare a programmare
Un viaggiatore desidera organizzare la propria travel_wishlist associando ogni nome di città al rispettivo paese. Per ottenere questo risultato in modo efficiente, è necessario trasformare i dati in un dizionario.
- Estrarre i nomi delle città e i relativi paesi da
travel_wishlist. - Salvare il dizionario risultante in
city_to_country.
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione