Come rimuovere un elemento da un dizionario di Python

Aliaksei Yursha 30 gennaio 2023
  1. L’istruzione del per rimuovere l’elemento del dizionario Python
  2. La funzione dict.pop() per rimuovere l’elemento dizionario Python
  3. Cancellare più elementi da un dizionario Python
  4. Caratteristiche delle prestazioni
Come rimuovere un elemento da un dizionario di Python

A volte il vostro dizionario Python contiene una o più chiavi che volete cancellare. Potete farlo in diversi modi.

L’istruzione del per rimuovere l’elemento del dizionario Python

Un approccio è quello di utilizzare l’affermazione integrata di Python del.

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['fats']
>>> meal
{'proteins': 10, 'carbohydrates': 80}

Si noti che se si tenta di cancellare un elemento con una chiave che non è presente nel dizionario,
Python runtime lancerà un KeyError.

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['water']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'water'

La funzione dict.pop() per rimuovere l’elemento dizionario Python

Un altro approccio è quello di usare la funzione dict.pop().
Il lato positivo di questo metodo è che permette di specificare
il valore di default da restituire se la chiave richiesta non esiste
nel dizionario.

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> meal.pop('water', 3000)
3000
>>> meal.pop('fats', 3000)
10
>>> meal
{'proteins': 10, 'carbohydrates': 80} 

Si noti che se non si fornisce il valore predefinito da restituire e il valore richiesto
non esiste, si otterrà anche un errore di runtime, come del sopra.

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> meal.pop('water')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'water'

Cancellare più elementi da un dizionario Python

Se è necessario cancellare più elementi da un dizionario in una sola volta,
Python 3 offre pratiche comprensioni di liste, che potete utilizzare a questo scopo.

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> [meal.pop(key) for key in ['fats', 'proteins']]
[10, 10]
>>> meal
{'carbohydrates': 80}

Si noti che con l’approccio di cui sopra, Python si bloccherà comunque se una delle chiavi passate non è nel dizionario.
Per aggirare questo problema, si può dare un secondo argomento a dict.pop() come valore di ritorno predefinito.

>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> [meal.pop(key, None) for key in ['water', 'sugars']]
[None, None]
>>> meal
{'fats': 10, 'proteins': 10, 'carbohydrates': 80}

Caratteristiche delle prestazioni

Utilizzando del statement e dict.pop() hanno caratteristiche di prestazione diverse.

>>> from timeit import timeit
>>> timeit("meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}; del meal['fats']")
0.12977536499965936
>>> timeit("meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}; meal.pop('fats', None)")
0.21620816600079706

Come segue dai tempi sopra riportati, l’istruzione del è quasi due volte più veloce.

Tuttavia, dict.pop() con un valore di fallback è più sicuro in quanto vi aiuterà ad evitare errori di runtime.

Utilizzare il primo se si è sicuri che le chiavi devono essere presenti nel dizionario, e preferire il secondo in caso contrario.

Articolo correlato - Python Dictionary