W3docs

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écnicaRemoveRetornaLança erro se chave ausente
dict.pop(key)Um par chave-valorO valor removidoKeyError (exceto se padrão fornecido)
dict.pop(key, default)Um par chave-valorO valor removido ou padrãoNunca
dict.popitem()Último par inseridoTupla (key, value)KeyError se o dicionário estiver vazio
del dict[key]Um par chave-valorNadaKeyError
dict.clear()Todos os paresNadaNunca
Compreensão de dicionárioPares seletivosNovo dicionárioNunca

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

python— editable, runs on the server

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

python— editable, runs on the server

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 del quando 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

python— editable, runs on the server

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 um KeyError.
  • 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).

Prática

Prática
Which method removes a key from a Python dictionary and returns its value?
Which method removes a key from a Python dictionary and returns its value?
Was this page helpful?