python - 如何在 python 中合并两个嵌套的字典?

标签 python dictionary

我有两个嵌套的字典数据。我想合并它们以在 python 中创建一个字典。 字典数据:

dict1 = {'employee':{'dev1': 'Roy'}}
dict2 = {'employee':{'dev2': 'Biswas'}}

现在我试图从他们那里创建一个像下面这样的字典。必需的输出

dict_output = {'employee':{
                    'dev1': 'Roy',
                    'dev2': 'Biswas'
                    }

       }

我的尝试:

import json

dict1 = {'employee':{'dev1': 'Roy'}}
dict2 = {'employee':{'dev2': 'Biswas'}}

dict1.update(dict2)
print(json.dumps(dict1, indent=2))

输出:

{
  "employee": {
    "dev2": "Biswas"
  }
}

我无法合并这两个字典。需要帮助来合并它们

最佳答案

这段代码是为了支持稍微不同的“合并”含义。假设我们有一个嵌套字典:

dict1 = {'employee':{'devs':{'python':{'dev1':'Roy'}}}}
dict2 = {'employee':{'devs':{'cpp':{'dev1':'Biswas'}}}}

在这种情况下,简单的循环解决方案返回:

{'employee': {'devs': {'cpp': {'dev1': 'Biswas'}}}}

虽然“直观”的答案应该是:

{'employee': {'devs': {'python': {'dev1': 'Roy'}, 'cpp': {'dev1': 'Biswas'}}}}

这只是一个简单的例子,真正的例子可能要复杂得多。

下面是我对这种嵌套字典的尝试。它适用于使用递归的嵌套数据。而且它也有一些限制。例如,如果 dict1 和 dict2 具有相同的值但不是字典,则 dict2 具有优先权。另一方面,如果 dict1 包含字典并且 dict2 包含具有相同键的值,则优先级在 dict1 上,而 dict2 被忽略。其他限制将需要更改代码。

def merge_dict(dict1, dict2):
    for key, val in dict1.items():
        if type(val) == dict:
            if key in dict2 and type(dict2[key] == dict):
                merge_dict(dict1[key], dict2[key])
        else:
            if key in dict2:
                dict1[key] = dict2[key]

    for key, val in dict2.items():
        if not key in dict1:
            dict1[key] = val

    return dict1

dict1 = merge_dict(dict1, dict2)

关于python - 如何在 python 中合并两个嵌套的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43797333/

相关文章:

python - 普通字典和 OrderedDictonary 的语法差异

python - 图像处理: vectorize numpy array elements substitution

python - 将 Python 项目及其依赖项打包到另一台没有互联网和不同操作系统的机器上

python - 如何使用 python 通过另一个脚本运行一个文件中的列表

java - 在 java 映射中搜索对象

java - 拆箱时如何检查泛型方法的返回类型以防止 NPE

dictionary - 如何重命名serde_json::Map中的所有键?

python - 从字典中获取值

python - 如何设置 Git 以将 python 应用程序文件部署到 Ubuntu Server 中?

python - 如何在开放式简历中与BGR图像像素值进行比较?