EDITAR:
Esta respuesta no funcionará para Python3 y dará un RuntimeError
.
RuntimeError: el diccionario cambió de tamaño durante la iteración.
Esto sucede porque mydict.keys()
devuelve un iterador, no una lista. Como se señaló en los comentarios, simplemente conviértalo mydict.keys()
en una lista list(mydict.keys())
y debería funcionar.
Una prueba simple en la consola muestra que no puede modificar un diccionario mientras itera sobre él:
>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> for k, v in mydict.iteritems():
... if k == 'two':
... del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
Como se indica en la respuesta de delnan, la eliminación de entradas causa problemas cuando el iterador intenta pasar a la siguiente entrada. En su lugar, utilice el keys()
método para obtener una lista de las claves y trabaje con eso:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Si necesita eliminar según el valor de los elementos, utilice el items()
método en su lugar:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}