"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo eliminar elementos de forma segura de un diccionario mientras se itera en Python?

¿Cómo eliminar elementos de forma segura de un diccionario mientras se itera en Python?

Publicado el 2024-11-12
Navegar:560

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

Modificación iterativa del diccionario

Es común tener que eliminar elementos de un diccionario mientras se itera sobre él simultáneamente. Sin embargo, esta operación no es compatible de forma nativa con Python.

Modificar un diccionario mientras se itera sobre él puede generar errores. Por ejemplo, el fragmento de código que proporcionó puede fallar en Python 3 con el error:

RuntimeError: dictionary changed size during iteration.

Solución Python 3

En Python 3, la solución es crear una lista de claves del diccionario y, en su lugar, iterar sobre esa lista. Aquí tienes un ejemplo:

# Python 3 or higher

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

Este enfoque funciona porque una lista es inmutable y no se verá afectada por los cambios en el diccionario.

Solución Python 2

En Python 2, el método llaves() devuelve un iterador, que no se puede modificar durante la iteración. Para modificar el diccionario, puede utilizar el siguiente método:

# Python 2

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

En Python 2, también puedes convertir el iterador en una lista:

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

Enfoque alternativo

Alternativamente, puedes usar el método pop() para eliminar elementos del diccionario mientras iteras:

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

Tenga en cuenta que este enfoque es más eficiente porque no crea una lista adicional.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3