Мне пришлось удалить некоторые поля из словаря, ключи от этих полей находятся в списке. Итак, я пишу эту функцию:Элегантный способ удаления полей из вложенных словарей
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
Этот код работает, но это не очень элегантно, и я уверен, что вы можете закодировать лучшее решение.
хммм я нахожу это элегантным! –
Я думаю, что это неплохой код; у вас есть важный бит, который рекурсирует по вложенным словарям. Вероятно, вы должны проверить 'isinstance (spam, collections.MutableMapping)' более политически. – katrielalex