6.1 Uso di enumerate()
Abbiamo già esaminato come lavorare con i cicli su keys
, values
e items
nei dizionari. Ora vediamo in dettaglio la funzione enumerate()
.
La funzione enumerate()
è utile per iterare gli elementi di un dizionario, fornendo accesso sia agli indici che alle chiavi e ai valori.
Ecco alcuni esempi di utilizzo di enumerate()
con i dizionari:
Iterazione su chiavi e valori di un dizionario con indici
Puoi usare enumerate()
per scorrere chiavi e valori di un dizionario, ottenendo al contempo gli indici.
# Dizionario con dati su una persona
person = {"name": "Alice", "age": 25, "city": "New York"}
# Iterazione su chiavi e valori del dizionario con indici
for index, (key, value) in enumerate(person.items()):
print(f"Indice: {index}, Chiave: {key}, Valore: {value}")
# Stampa l'indice, la chiave e il valore di ogni elemento del dizionario
Output:
Indice: 0, Chiave: name, Valore: Alice
Indice: 1, Chiave: age, Valore: 25
Indice: 2, Chiave: city, Valore: New York
Trasformazione dei valori del dizionario usando gli indici
Puoi usare enumerate()
per modificare i valori del dizionario in base al loro indice.
# Dizionario originale
person = {"name": "Alice", "age": 25, "city": "New York"}
# Nuovo dizionario con indici nei valori
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# Assegna al valore nel dizionario l'indice come stringa
print(indexed_person)
# Stampa il dizionario con gli indici aggiunti ai valori
Output:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
Uso di enumerate()
per creare un nuovo dizionario
Puoi usare enumerate()
per creare un nuovo dizionario in cui gli indici saranno le chiavi.
# Dizionario originale
person = {"name": "Alice", "age": 25, "city": "New York"}
# Nuovo dizionario, dove gli indici sono usati come chiavi
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# Stampa il nuovo dizionario con indici come chiavi
Output:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 Generatori di dizionari
Abbiamo già usato le List Comprehensions per generare liste e le Set Comprehensions per generare set. Allo stesso modo, si può usare la sintassi dei generatori per creare dizionari. Dictionary Comprehensions (generatori di dizionari) permettono di scrivere codice più conciso e leggibile per creare dizionari.
La sintassi di base di dictionary comprehension è la seguente:
{espressione1: espressione2 for variabile in sequenza if condizione}
dove
-
variabile
— la variabile che assume il valore di ogni elemento dall'oggetto iterabile. -
sequenza
— l'oggetto iterabile (come una lista, una tupla, una stringa) che si attraversa con la variabile. -
espressione1
— l'espressione per generare le chiavi del dizionario. Solitamente dipende dalla variabile. -
espressione2
— l'espressione per generare i valori del dizionario. -
condizione
— (opzionale) la condizione che deve essere soddisfatta per includere un elemento nel dizionario.
Esempio 1:
Creazione di un dizionario con i quadrati dei numeri
# Creazione di un dizionario dove le chiavi sono numeri da 1 a 5 e i valori i loro quadrati
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # Output: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Esempio 2:
Creazione di un dizionario da una lista di tuple
# Lista di tuple contenenti coppie chiave-valore
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# Generazione di un dizionario dalla lista di tuple
person = {key: value for key, value in pairs}
print(person) # Output: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Esempio 3:
Filtraggio degli elementi nella creazione di un dizionario
# Creazione di un dizionario dove le chiavi sono numeri da 1 a 10 e i valori i loro quadrati
# Solo per i numeri pari
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # Output: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
Esempio 4:
Trasformazione degli elementi nella creazione di un dizionario
# Lista di stringhe
words = ["apple", "banana", "cherry"]
# Generazione di un dizionario dove le chiavi sono le stringhe e i valori le loro lunghezze
word_lengths = {word: len(word) for word in words}
print(word_lengths) # Output: {'apple': 5, 'banana': 6, 'cherry': 6}
Dictionary comprehensions annidati
# Lista di liste con coppie chiave-valore
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# Generazione di un dizionario da una lista annidata
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Metodi combinati
È possibile combinare diversi metodi per creare dizionari in casi più complessi.
# Unione di più dizionari in uno solo
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # Output: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
L'uso dell'operatore **
davanti al nome del dizionario permette di scompattare i suoi elementi, come se fossero elencati in fila. In questo modo, l'espressione {**dict1, **dict2}
combina effettivamente gli elementi di entrambi i dizionari.
GO TO FULL VERSION