"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como excluir itens de um dicionário com segurança durante a iteração em Python?

Como excluir itens de um dicionário com segurança durante a iteração em Python?

Publicado em 2024-11-12
Navegar:194

How to Safely Delete Items from a Dictionary While Iterating in Python?

Modificação de dicionário iterativo

É comum precisar excluir itens de um dicionário enquanto itera simultaneamente sobre ele. No entanto, esta operação não tem suporte nativo em Python.

Modificar um dicionário durante a iteração sobre ele pode levar a erros. Por exemplo, o snippet de código que você forneceu pode falhar no Python 3 com o erro:

RuntimeError: dictionary changed size during iteration.

Python 3 Solution

No Python 3, a solução é criar uma lista de chaves do dicionário e iterar sobre essa lista. Aqui está um exemplo:

# Python 3 or higher

for k in list(mydict.keys()):
    if mydict[k] == 3:
        del mydict[k]

Essa abordagem funciona porque uma lista é imutável e não será afetada por alterações no dicionário.

Solução Python 2

Em Python 2, o método keys() retorna um iterador, que não pode ser modificado durante a iteração. Para modificar o dicionário, você pode usar a seguinte abordagem:

# Python 2

for k, v in mydict.items():
    if v == 3:
        del mydict[k]

Em Python 2, você também pode converter o iterador em uma lista:

for k in mydict.keys():
    if mydict[k] == 3:
        del mydict[k]

Abordagem alternativa

Como alternativa, você pode usar o método pop() para excluir itens do dicionário durante a iteração:

for k in list(mydict.keys()):
    if k == 3:
        mydict.pop(k)

Observe que essa abordagem é mais eficiente porque não cria uma lista adicional.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3