从python嵌套字典中弹出一个键值和整个路径

从python嵌套字典中弹出一个键值和整个路径,python,dictionary,Python,Dictionary,我有一本嵌套字典,如下所示。我需要从字典中弹出一个键及其值,在嵌套字典中包含该键的整个路径,并将其放入列表中 a={'aa': {'1': {'bb':{'2': {'cc' : ['xx', 'yy']}, '3': {'dd' : ['zz', 'yy']}}}, '11': {'bbb':{'22': {'cc': ['xxx', 'yyy']}, '33': {'dd' : ['zz'

我有一本嵌套字典,如下所示。我需要从字典中弹出一个键及其值,在嵌套字典中包含该键的整个路径,并将其放入列表中

a={'aa': {'1': {'bb':{'2': {'cc' : ['xx', 'yy']},
                      '3': {'dd' : ['zz', 'yy']}}},
        '11': {'bbb':{'22': {'cc': ['xxx', 'yyy']},
                      '33': {'dd' : ['zz', 'yy']}}}}}
我正在寻找一个像这样弹出值的列表

lis = [{'aa': {'1': {'bb':{'3': {'dd' : ['zz', 'yy']},  {'aa': {'11': {'bbb':{'33': {'dd' : ['zz', 'yy']}]
我的代码如下。它从附件中弹出值,但无法将其存储在列表中。有没有一种方法可以将弹出的值及其整个路径存储在上面的列表中

def delete_keys_from_dict(dict_del, lst_keys):
    for k in lst_keys:
        try:
            dict_del.pop(k)
        except KeyError:
            pass
    for v in dict_del.values():
        if isinstance(v, dict):
            delete_keys_from_dict(v, lst_keys)    
    return dict_del    

delete_keys_from_dict(a, ['dd'])

我想您正在查找poped值。您可以在从字典中删除时将poped值添加到列表中

  a={'aa': {'1': {'bb':{'2': {'cc' : ['xx', 'yy']},
                          '3': {'dd' : ['zz', 'yy']}}},
            '11': {'bbb':{'22': {'cc': ['xxx', 'yyy']},
                          '33': {'dd' : ['zz', 'yy']}}}}}

    def delete_keys_from_dict(dict_del, lst_keys,res=[]):
        for k in lst_keys:
            try:
                res.append((k,dict_del.pop(k)))
            except KeyError:
                pass
        for v in dict_del.values():
            if isinstance(v, dict):
                delete_keys_from_dict(v, lst_keys)    
        return dict_del,res

    result = delete_keys_from_dict(a, ['dd'])
    print('Updated Dictionary : ' + str(result[0]))

    print('Deleted  : ' + str(result[1]))
输出

Updated Dictionary : {'aa': {'1': {'bb': {'3': {}, '2': {'cc': ['xx', 'yy']}}}, '11': {'bbb': {'22': {'cc': ['xxx', 'yyy']}, '33': {}}}}}

Deleted  : [('dd', ['zz', 'yy']), ('dd', ['zz', 'yy'])]

您不应该将默认值设置为列表,多次调用
delete_keys_from_dict
将返回错误的结果。@himanshu有没有办法像{'aa':{'1':{'bb':{'3':{'dd':['zz','yy']那样获取已删除键的整个路径?