J'ai dû supprimer certains champs d'un dictionnaire, les clés de ces champs sont sur une liste. Alors j'écris cette fonction:Élégante façon de supprimer des champs de dictionnaires imbriqués
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
Ce code fonctionne, mais ce n'est pas très élégant et je suis sûr que vous pouvez coder une meilleure solution.
hmmm Je trouve élégant! –
Je pense que ce n'est pas un mauvais code; vous avez le bit important qui est récursif sur les dictionnaires imbriqués. Vous devriez probablement vérifier 'isinstance (spam, collections.MutableMapping)' pour être plus polymorphe. – katrielalex