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}