CodeGym /Corso Java /Python SELF IT /Collezione Dictionary

Collezione Dictionary

Python SELF IT
Livello 11 , Lezione 1
Disponibile

1.1 Il Dizionario e le sue Proprieta

Dizionario (dictionary) in Python — è una collezione ordinata di coppie chiave-valore, dove ogni chiave è unica. I dizionari sono uno dei tipi di dati più flessibili e potenti in Python, usati per memorizzare e gestire dati. Li useremo molto spesso, praticamente tanto quanto le liste. Presto te ne renderai conto da solo :)

Principali proprietà dei dizionari:

1. Chiavi uniche

Ogni chiave nel dizionario deve essere unica. Se una coppia chiave-valore con una chiave già esistente viene aggiunta al dizionario, il vecchio valore verrà sostituito dal nuovo. Ad esempio, se vuoi memorizzare dati sugli studenti e usi i loro ID come chiavi:


students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students)  # Output: {'123': 'Mike', '124': 'Alice'}

2. Ordinazione

Importante! Fino alla versione Python 3.7 i dizionari erano collezioni non ordinate, il che significa che l'ordine degli elementi non era garantito. A partire da Python 3.7, i dizionari conservano l'ordine di aggiunta degli elementi, ma questo aspetto non è parte obbligatoria della specifica del linguaggio fino alla versione Python 3.8, dove è diventato standard.

Questo era 5 anni fa. Stiamo studiando Python basato sulla versione 3.12 quindi puoi tranquillamente considerare il dizionario come un set ordinato di elementi.

3. Mutabilità

I dizionari sono mutabili, il che significa che puoi aggiungere, modificare o eliminare elementi dopo la creazione del dizionario. Ad esempio, aggiungiamo l'indirizzo dello studente:


student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student)  # Output: {'name': 'John', 'age': 20, 'address': '123 Main St'}

4. Efficienza

I dizionari sono ottimizzati per la ricerca rapida, l'aggiunta e la cancellazione di coppie chiave-valore. In media, le operazioni di ricerca, aggiunta e cancellazione vengono eseguite in tempo costante, O(1). Scoprirete cosa sia la complessità degli algoritmi un po' più avanti, quando parleremo di “Algoritmi e strutture dati”.

5. Chiavi e valori

Le chiavi in un dizionario possono essere di qualsiasi tipo di dati immutabile, come stringhe, numeri o tuple. I valori possono essere di qualsiasi tipo di dati, inclusi altri dizionari.

6. Metodi di accesso e modifica

I dizionari supportano vari metodi per accedere agli elementi, aggiungere, modificare e cancellare coppie chiave-valore. Alcuni di questi metodi includono get(), keys(), values(), items(), update(), pop(), e altri. Più dettagliatamente nelle prossime lezioni.

7. Ciclo sugli elementi

Puoi iterare su chiavi, valori o coppie chiave-valore in un dizionario usando i loop. Questo rende facile eseguire operazioni sugli elementi del dizionario. Per esempio:


student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
    print(f"{key}: {value}")

L'output sarà:

name: John
age: 20
address: 123 Main St

8. Hashabilità delle chiavi

Le chiavi nei dizionari devono essere hashabili (dalla parola hash). Questo significa che le chiavi devono avere un valore hash che non cambia durante la loro esistenza. Il valore hash si ottiene tramite una funzione di hash, un algoritmo che converte dati di ingresso di lunghezza arbitraria in un valore di uscita di lunghezza fissa. Questo è chiamato valore hash o codice hash. I tipi di dati immutabili, come stringhe, numeri e tuple, sono hashabili e possono essere usati come chiavi.

Studieremo più dettagliatamente le funzioni di hash e l'hashabilità nella lezione su "Algoritmi e strutture dati".

1.2 Creazione di un dizionario con {}

I dizionari (dictionaries) in Python possono essere creati in diversi modi. Ecco vari modi per creare un oggetto dizionario con esempi:

Usare le parentesi graffe {}

Il modo più comune per creare un dizionario è usare le parentesi graffe con coppie chiave-valore separate da virgole. La coppia chiave-valore è separata da due punti.


# Creare un dizionario vuoto
empty_dict = {}

# Creare un dizionario con elementi
person = {
    "name": "John",
    "age": 30,
    "city": "New York"
}
print(type(person))
print(person)

Importante! Creare un dizionario è simile a creare un insieme. In teoria, puoi considerare il dizionario come un insieme di chiavi a cui sono associati valori.

Se nelle parentesi graffe sono elencate solo le "chiavi", viene creato un insieme; se dopo le chiavi ci sono i due punti e i valori, allora viene creato un dizionario. Le parentesi graffe vuote sono sempre un dizionario.


# Creare un dizionario vuoto
empty_dict = {}

# Creare un insieme con elementi
unique_items = {
    "name",
    "age",
    "city"
}
print(type(unique_items))
print(unique_items)

1.3 Creazione di un dizionario usando la funzione dict()

La funzione dict() può essere usata per creare un dizionario da una sequenza di coppie chiave-valore, così come da argomenti nominati.

Esempio con una sequenza di coppie chiave-valore:


# Creare un dizionario da una lista di tuple
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)

Esempio con argomenti nominati. Le parentesi aggiuntive qui non sono necessarie:


# Creare un dizionario con argomenti nominati
person = dict(name="John", age=30, city="New York")
print(person)

Uso del metodo dict.fromkeys()

Il metodo fromkeys() crea un dizionario con le chiavi date e con un valore di default.


# Creare un dizionario con chiavi e un valore di default
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value) 
print(person)

Il dizionario avrà tre chiavi, ma tutte conterranno lo stesso valore.

1.4 Creazione di un dizionario da variabili esistenti

I dizionari possono essere creati utilizzando le variabili come chiavi e valori.


# Creare un dizionario da variabili
name = "John"
age = 30
city = "New York"

person = {"name": name, "age": age, "city": city}
print(person)

1.5 Uso dei generatori di dizionari

I generatori di dizionari permettono di creare dizionari usando costrutti brevi e concisi, simili ai generatori di liste.


# Creare un dizionario usando un generatore di dizionario
squares = {x: x**2 for x in range(1, 6)}
print(squares)

1.6 Accesso ai valori in un dizionario

Per ottenere un valore da una chiave, si usa la sintassi []:


# Accesso ai valori in un dizionario
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"])  # Output: John

Importante! Se la chiave non viene trovata, si verificherà un errore KeyError. Per evitare ciò, puoi usare il metodo get(), che restituisce il valore per la chiave, se esiste, o None (o un altro valore di default), se la chiave non viene trovata.


# Uso del metodo get() per accedere ai valori nel dizionario
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name"))  # Output: John
print(person.get("address", "Indirizzo non trovato"))  # Output: Indirizzo non trovato

1.7 Modifica dei valori in un dizionario

I valori in un dizionario possono essere modificati accedendo a essi tramite la chiave e assegnando un nuovo valore.


# Modifica dei valori in un dizionario
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person)  # Output: {'name': 'John', 'age': 31, 'city': 'New York'}

1.8 Eliminazione di elementi da un dizionario

Gli elementi possono essere eliminati usando l'operatore del o il metodo pop().


# Eliminazione di un elemento con del
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person)  # Output: {'name': 'John', 'city': 'New York'}

# Eliminazione di un elemento con pop()
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person)  # Output: {'name': 'John', 'city': 'New York'}
print(age)     # Output: 30

1.9 Controllo della presenza di una chiave in un dizionario

Puoi controllare se una chiave è presente in un dizionario usando l'operatore in.


# Controllo della presenza di una chiave in un dizionario
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person)  # Output: True
print("address" in person)  # Output: False

1.10 Iterazione sugli elementi di un dizionario

Puoi iterare su chiavi, valori o coppie chiave-valore in un dizionario:


# Iterazione sulle chiavi del dizionario
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
    print(key)

# Iterazione sui valori del dizionario
for value in person.values():
    print(value)

# Iterazione sulle coppie chiave-valore del dizionario
for key, value in person.items():
    print(f"{key}: {value}")

1.11 Esempi di utilizzo dei dizionari in compiti reali

Vediamo alcuni esempi dalla vita reale dove l'uso dei dizionari può essere utile:

Esempio 1: Conteggio della frequenza delle parole in un testo

Supponiamo di avere un testo e vogliamo contare quante volte ogni parola appare in questo testo.


text = "hello world hello"
word_count = {}
for word in text.split():
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1
print(word_count)  # Output: {'hello': 2, 'world': 1}

Esempio 2: Memorizzazione dei dati degli studenti

Possiamo usare un dizionario per memorizzare i dati degli studenti, dove le chiavi saranno i loro ID e i valori saranno i loro dati.


students = {
    "123": {"name": "John", "age": 20, "major": "Computer Science"},
    "124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"])  # Output: John

Esempio 3: Rubrica telefonica

I dizionari possono essere usati per creare una semplice rubrica telefonica, dove le chiavi saranno i nomi e i valori i numeri di telefono.


phone_book = {
    "John": "123-456-7890",
    "Alice": "987-654-3210"
}
print(phone_book["Alice"])  # Output: 987-654-3210
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION