Come rimuovere un elemento da un dizionario di Python
-
L’istruzione
del
per rimuovere l’elemento del dizionario Python -
La funzione
dict.pop()
per rimuovere l’elemento dizionario Python - Cancellare più elementi da un dizionario Python
- Caratteristiche delle prestazioni
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.