EDITAR:
Esta resposta não funcionará para Python3 e fornecerá a RuntimeError.
RuntimeError: o dicionário mudou de tamanho durante a iteração.
Isso acontece porque mydict.keys()retorna um iterador, não uma lista. Conforme indicado nos comentários, basta converter mydict.keys()em uma lista por list(mydict.keys())e deve funcionar.
Um teste simples no console mostra que você não pode modificar um dicionário enquanto itera sobre ele:
>>> 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
Conforme indicado na resposta de delnan, a exclusão de entradas causa problemas quando o iterador tenta passar para a próxima entrada. Em vez disso, use o keys()método para obter uma lista das chaves e trabalhar com isso:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Se você precisar excluir com base no valor dos itens, use o items()método:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}