Como Remover um Elemento de um Dicionário Python

Aliaksei Yursha 30 janeiro 2023
  1. A declaração del para remover o elemento do dicionário Python
  2. A função dict.pop() para remover o elemento do dicionário Python
  3. Excluindo múltiplos elementos de um dicionário Python
  4. Características de desempenho
Como Remover um Elemento de um Dicionário Python

À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.

Artigo relacionado - Python Dictionary