Como Remover um Elemento de um Dicionário Python
-
A declaração
del
para remover o elemento do dicionário Python -
A função
dict.pop()
para remover o elemento do dicionário Python - Excluindo múltiplos elementos de um dicionário Python
- Características de desempenho
Às vezes o seu dicionário Python contém uma chave ou várias chaves que você quer apagar. Você pode fazer isso de várias maneiras diferentes.
A declaração del
para remover o elemento do dicionário Python
Uma abordagem é utilizar a declaração del
incorporada do Python.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['fats']
>>> meal
{'proteins': 10, 'carbohydrates': 80}
Note que se você tentar apagar um elemento por uma chave que não esteja presente no dicionário,
Python runtime vai lançar um KeyError
.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> del meal['water']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'water'
A função dict.pop()
para remover o elemento do dicionário Python
Outra abordagem é utilizar a função dict.pop()
.
O lado positivo deste método é que ele permite que você especifique
o valor padrão a retornar se a chave solicitada não existir
no dicionário.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> meal.pop('water', 3000)
3000
>>> meal.pop('fats', 3000)
10
>>> meal
{'proteins': 10, 'carbohydrates': 80}
Note que se você não fornecer o valor padrão para retornar e o valor solicitado
não existe, você também receberá um erro de tempo de execução, como o del
acima.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> meal.pop('water')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'water'
Excluindo múltiplos elementos de um dicionário Python
Se você precisar excluir vários elementos de um dicionário de uma só vez,
Python 3 oferece compreensões de lista, que você pode empregar para este fim.
>>> meal = {'fats': 10, 'proteins': 10, 'carbohydrates': 80}
>>> [meal.pop(key) for key in ['fats', 'proteins']]
[10, 10]
>>> meal
{'carbohydrates': 80}
Note que com a abordagem acima, Python ainda irá falhar se uma das chaves passadas não estiver no dicionário.
Para contornar esta questão, você pode dar um segundo argumento para dict.pop()
como um valor de retorno padrão.
>>> 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}
Características de desempenho
Utilizando a instrução del
e dict.pop()
têm características de desempenho diferentes.
>>> 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
Como se segue dos timings acima, a instrução del
é quase duas vezes mais rápida.
No entanto, dict.pop()
com um valor fallback é mais seguro, pois o ajudará a evitar erros de tempo de execução.
Utilize o primeiro se você estiver confiante de que as chaves devem estar presentes no dicionário, e prefira o segundo caso contrário.