W3docs

Rimuovere Elementi

Scopri tutti i modi per rimuovere elementi da un dizionario Python: pop(), popitem(), del, clear() e le dict comprehension, con esempi e avvertenze.

I dizionari Python sono archivi chiave-valore mutabili, il che significa che puoi aggiungere, modificare e rimuovere voci in qualsiasi momento. Questo capitolo illustra tutte le tecniche standard per rimuovere elementi da un dizionario — pop(), popitem(), l'istruzione del, clear() e le dict comprehension — con note pratiche su quando ciascun approccio è più adatto e come evitare gli errori più comuni.

Confronto rapido

TecnicaRimuoveRestituisceErrore per chiave mancante
dict.pop(key)Una coppia chiave-valoreIl valore rimossoKeyError (a meno che non sia fornito un default)
dict.pop(key, default)Una coppia chiave-valoreIl valore rimosso o il defaultMai
dict.popitem()L'ultima coppia inseritaTupla (key, value)KeyError se il dizionario è vuoto
del dict[key]Una coppia chiave-valoreNienteKeyError
dict.clear()Tutte le coppieNienteMai
Dict comprehensionCoppie selettiveNuovo dizionarioMai

Rimuovere un singolo elemento con pop()

dict.pop(key) rimuove la coppia chiave-valore per la chiave specificata e restituisce il valore che era memorizzato lì. Questo lo rende utile quando hai bisogno del valore per ulteriori elaborazioni dopo la rimozione.

Rimuovere una chiave e acquisire il suo valore

python— editable, runs on the server

Se la chiave non esiste, pop() solleva un KeyError:

inventory = {'apples': 10}
inventory.pop('oranges')  # KeyError: 'oranges'

Usare un default per evitare KeyError

Passa un secondo argomento a pop() come valore di fallback. Quando la chiave è assente, pop() restituisce il default invece di sollevare un errore — il dizionario rimane invariato.

Rimozione sicura con un default

inventory = {'apples': 10, 'cherries': 20}
removed = inventory.pop('oranges', 0)
print(removed)    # 0
print(inventory)  # {'apples': 10, 'cherries': 20}

Questo schema è un'alternativa pulita al controllo if key in dict prima di chiamare pop().

Rimuovere l'ultimo elemento inserito con popitem()

dict.popitem() rimuove e restituisce l'ultima coppia chiave-valore inserita come tupla (key, value). Era lo strumento principale per iterare e consumare un dizionario prima che Python 3.7 garantisse l'ordine di inserimento.

Estrarre l'ultimo elemento inserito

scores = {'alice': 95, 'bob': 82, 'carol': 78}
last_item = scores.popitem()
print(last_item)  # ('carol', 78)
print(scores)     # {'alice': 95, 'bob': 82}

popitem() solleva un KeyError se il dizionario è vuoto. Usalo quando vuoi elaborare e consumare tutti gli elementi uno per uno (come uno stack), oppure quando devi rimuovere solo l'ultima voce aggiunta di recente.

Rimuovere un elemento con del

L'istruzione del rimuove una coppia chiave-valore tramite chiave senza restituire alcun valore. Usala quando devi solo eliminare la voce e non hai interesse nel valore rimosso.

Eliminare una chiave con del

python— editable, runs on the server

Come pop() senza un default, del solleva un KeyError se la chiave è mancante:

del user['phone']  # KeyError: 'phone'

del vs pop() — quale usare?

  • Usa del quando vuoi scartare l'elemento e non hai mai bisogno del suo valore.
  • Usa pop() quando hai bisogno del valore rimosso, o vuoi un'operazione sicura senza effetti quando la chiave potrebbe essere assente.

Rimuovere tutti gli elementi con clear()

dict.clear() svuota il dizionario sul posto, lasciando un {} vuoto. L'oggetto dizionario stesso esiste ancora, quindi qualsiasi altra variabile che fa riferimento allo stesso dict vedrà anch'essa un dict vuoto.

Cancellare tutte le voci

config = {'host': 'localhost', 'port': 5432, 'debug': True}
config.clear()
print(config)  # {}

Confronta questo con la riassegnazione config = {}: la riassegnazione crea un nuovo oggetto dizionario e lascia tutti gli altri riferimenti che puntano a quello vecchio (ancora popolato). clear() modifica lo stesso oggetto.

config = {'host': 'localhost', 'port': 5432}
alias = config          # alias and config point to the same dict

config = {}             # only config is updated; alias still has data
print(alias)            # {'host': 'localhost', 'port': 5432}

config = {'host': 'localhost', 'port': 5432}
alias = config
config.clear()          # modifies the shared object
print(alias)            # {}

Rimuovere più chiavi specifiche

Python non dispone di un metodo built-in per rimuovere più chiavi contemporaneamente, ma esistono due approcci idiomatici.

Loop con pop()

settings = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
to_remove = ['b', 'd']

for key in to_remove:
    settings.pop(key, None)  # None default = safe even if key is absent

print(settings)  # {'a': 1, 'c': 3}

Dictionary comprehension

Una dict comprehension costruisce un nuovo dizionario che esclude le chiavi indesiderate. È preferibile quando vuoi mantenere l'originale intatto.

Filtrare un dizionario con una comprehension

python— editable, runs on the server

Puoi anche filtrare per valore anziché per chiave:

scores = {'alice': 95, 'bob': 40, 'carol': 78, 'dan': 35}
passing = {name: score for name, score in scores.items() if score >= 50}
print(passing)  # {'alice': 95, 'carol': 78}

Rimuovere elementi durante un ciclo — l'errore comune

Modificare un dizionario durante l'iterazione solleva un RuntimeError in Python 3:

data = {'a': 1, 'b': 2, 'c': 3}

# This raises RuntimeError: dictionary changed size during iteration
for key in data:
    if data[key] < 2:
        del data[key]

Lo schema sicuro è iterare su una copia delle chiavi:

data = {'a': 1, 'b': 2, 'c': 3}

for key in list(data):           # list() snapshots the keys
    if data[key] < 2:
        del data[key]

print(data)  # {'b': 2, 'c': 3}

In alternativa, costruisci un nuovo dict con una comprehension (mostrato sopra nella sezione comprehension) — questo è spesso l'approccio più pulito.

Per ulteriori informazioni sull'iterazione sicura dei dizionari, consulta Loop Dizionari.

Scegliere il metodo giusto

  • Hai bisogno del valore rimosso? Usa pop(key).
  • La chiave potrebbe non esistere? Usa pop(key, default) per evitare un KeyError.
  • Stai solo eliminando, senza bisogno del valore? Usa del dict[key].
  • Rimuovere l'ultima voce inserita? Usa popitem().
  • Cancellare tutto? Usa clear().
  • Rimuovere in base a una condizione / più chiavi? Usa una dict comprehension o un ciclo for key in list(dict).

Pratica

Pratica
Quale metodo rimuove una chiave da un dizionario Python e ne restituisce il valore?
Quale metodo rimuove una chiave da un dizionario Python e ne restituisce il valore?
Was this page helpful?