【问题标题】:Merge nested dictionaries by appending [duplicate]通过附加 [重复] 合并嵌套字典
【发布时间】:2017-11-30 01:59:15
【问题描述】:

我正在尝试为我的 CG 管道自动创建菜单。我有很多脚本,手动维护管道变得很麻烦。我只想在每个具有菜单项层次结构的模块中放置一个嵌套字典变量——它会告诉菜单构建器脚本将菜单项放在哪里。

基本上,我无法弄清楚如何像这样合并字典:

dict_1 = {
    'ROOT DIV A' : {
        'Root Menu A': {
            'SUB DIV A' : {
                'Sub Menu A':{
                    'command' : 'import commands',
                    'annotation' : 'some command'
                }
            }
        }
    }
}

dict_2 = {
    'ROOT DIV A' : {
        'Root Menu A': {
            'SUB DIV A' : {
                'Sub Menu B':{
                    'command' : 'import commands',
                    'annotation' : 'some command'
                }
            }
        }
    }
}

dict_3 = {
    'ROOT DIV A' : {
        'Root Menu B':{
            'command' : 'import commands',
            'annotation' : 'some command'
        }
    }
}

输出如下所示:

 result_dict = {
    'ROOT DIV A' : {
        'Root Menu A': {
            'SUB DIV A' : {
                'Sub Menu A':{
                    'command' : 'import commands',
                    'annotation' : 'some command'
                },
                'Sub Menu B':{
                    'command' : 'import commands',
                    'annotation' : 'some command'
                }
            }
        },
        'Root Menu B':{
            'command' : 'import commands',
            'annotation' : 'some command'
        }
    }
}

我尝试过更新,但它似乎覆盖了值。我在这里尝试了一堆递归函数示例,但没有找到深度嵌套字典的示例(只有单个嵌套)。我想要比那些硬编码示例更动态的东西。我也在考虑继续这个方向,因为我不确定这是否可能,所以对此进行一些确认也会有所帮助。谢谢!

【问题讨论】:

    标签: python dictionary nested


    【解决方案1】:

    试试这个功能:

    def merge_dicts(x, y):    
        for key in y:
            if key in x:
                if isinstance(x[key], dict) and isinstance(y[key], dict):
                    merge_dicts(x[key], y[key])
            else:
                x[key] = y[key]
        return x
    
    result_dict = merge_dicts(merge_dicts(dict_1, dict_2), dict_3)
    

    【讨论】:

    • 看起来这样可以解决问题。谢谢!
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 2021-05-03
    • 2019-06-04
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多