Tuve que eliminar algunos campos de un diccionario, las claves de estos campos están en una lista. Así que escribo esta función:Manera elegante de eliminar campos de diccionarios anidados
def delete_keys_from_dict(dict_del, lst_keys):
"""
Delete the keys present in the lst_keys from the dictionary.
Loops recursively over nested dictionaries.
"""
dict_foo = dict_del.copy()#Used as iterator to avoid the 'DictionaryHasChanged' error
for field in dict_foo.keys():
if field in lst_keys:
del dict_del[field]
if type(dict_foo[field]) == dict:
delete_keys_from_dict(dict_del[field], lst_keys)
return dict_del
Este código funciona, pero no es muy elegante y estoy seguro de que se puede codificar una mejor solución.
hmmm me resulta elegante! –
Creo que no es un código malo; tienes el bit importante que está recurriendo a los diccionarios anidados. Probablemente deberías comprobar 'isinstance (spam, collections.MutableMapping)' para que sea más polimórfico. – katrielalex