CodeGym /Corso Java /Python SELF IT /Cicli e generatori di dizionari

Cicli e generatori di dizionari

Python SELF IT
Livello 11 , Lezione 6
Disponibile

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.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION