Remover Itens
Aprenda todas as formas de remover itens de um dicionário Python: pop(), popitem(), del, clear() e compreensões de dicionário, com exemplos e dicas.
Dicionários Python são estruturas mutáveis de chave-valor, o que significa que você pode adicionar, alterar e remover entradas a qualquer momento. Este capítulo cobre todas as técnicas padrão para remover itens de um dicionário — pop(), popitem(), a instrução del, clear() e compreensões de dicionário — com observações práticas sobre quando cada abordagem é mais adequada e como evitar erros comuns.
Comparação rápida
| Técnica | Remove | Retorna | Lança erro se chave ausente |
|---|---|---|---|
dict.pop(key) | Um par chave-valor | O valor removido | KeyError (exceto se padrão fornecido) |
dict.pop(key, default) | Um par chave-valor | O valor removido ou padrão | Nunca |
dict.popitem() | Último par inserido | Tupla (key, value) | KeyError se o dicionário estiver vazio |
del dict[key] | Um par chave-valor | Nada | KeyError |
dict.clear() | Todos os pares | Nada | Nunca |
| Compreensão de dicionário | Pares seletivos | Novo dicionário | Nunca |
Removendo um único item com pop()
dict.pop(key) remove o par chave-valor da chave fornecida e retorna o valor que estava armazenado lá. Isso o torna útil quando você precisa do valor para processamento posterior após a remoção.
Remover uma chave e capturar seu valor
Se a chave não existir, pop() lança um KeyError:
inventory = {'apples': 10}
inventory.pop('oranges') # KeyError: 'oranges'Usando um valor padrão para evitar KeyError
Passe um segundo argumento para pop() como valor de fallback. Quando a chave está ausente, pop() retorna o padrão em vez de lançar um erro — o dicionário permanece inalterado.
Remoção segura com um valor padrão
inventory = {'apples': 10, 'cherries': 20}
removed = inventory.pop('oranges', 0)
print(removed) # 0
print(inventory) # {'apples': 10, 'cherries': 20}Esse padrão é uma alternativa limpa a verificar if key in dict antes de chamar pop().
Removendo o último item inserido com popitem()
dict.popitem() remove e retorna o par chave-valor inserido por último como uma tupla (key, value). Era a principal ferramenta para iterar e consumir um dicionário antes que o Python 3.7 garantisse a ordem de inserção.
Remover o último item inserido
scores = {'alice': 95, 'bob': 82, 'carol': 78}
last_item = scores.popitem()
print(last_item) # ('carol', 78)
print(scores) # {'alice': 95, 'bob': 82}popitem() lança um KeyError se o dicionário estiver vazio. Use-o quando quiser processar e consumir todos os itens um a um (estilo pilha), ou quando precisar remover apenas a entrada mais recentemente adicionada.
Removendo um item com del
A instrução del remove um par chave-valor pela chave sem retornar nenhum valor. Use-a quando precisar apenas excluir a entrada e não tiver interesse no valor removido.
Excluir uma chave com del
Assim como pop() sem um padrão, del lança um KeyError se a chave estiver ausente:
del user['phone'] # KeyError: 'phone'del vs pop() — qual usar?
- Use
delquando quiser descartar o item e nunca precisar do seu valor. - Use
pop()quando precisar do valor removido, ou quiser um comportamento seguro sem erros quando a chave pode estar ausente.
Removendo todos os itens com clear()
dict.clear() esvazia o dicionário no lugar, deixando um {} vazio. O objeto dicionário em si ainda existe, portanto qualquer outra variável que referencie o mesmo dicionário também verá um dicionário vazio.
Limpar todas as entradas
config = {'host': 'localhost', 'port': 5432, 'debug': True}
config.clear()
print(config) # {}Compare isso com a reatribuição config = {}: a reatribuição cria um novo objeto dicionário e deixa quaisquer outras referências apontando para o antigo (ainda populado). clear() modifica o mesmo objeto.
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) # {}Removendo múltiplas chaves específicas
Python não tem um método embutido para remover múltiplas chaves de uma vez, mas existem duas abordagens idiomáticas.
Loop com 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}Compreensão de dicionário
Uma compreensão de dicionário constrói um novo dicionário que exclui as chaves indesejadas. Isso é preferível quando você quer manter o original intacto.
Filtrar um dicionário usando compreensão
Você também pode filtrar por valor em vez de chave:
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}Removendo itens durante o loop — o erro comum
Modificar um dicionário durante a iteração lança um RuntimeError no 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]O padrão seguro é iterar sobre uma cópia das chaves:
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}Como alternativa, construa um novo dicionário com uma compreensão (mostrado acima na seção de compreensão) — esta costuma ser a abordagem mais limpa.
Para mais informações sobre como iterar dicionários com segurança, consulte Loop Dictionaries.
Escolhendo o método certo
- Precisa do valor removido? Use
pop(key). - A chave pode não existir? Use
pop(key, default)para evitar umKeyError. - Apenas excluindo, sem necessidade do valor? Use
del dict[key]. - Remover a última entrada inserida? Use
popitem(). - Apagar tudo? Use
clear(). - Remover com base em uma condição / múltiplas chaves? Use uma compreensão de dicionário ou um loop
for key in list(dict).