Python中字典的深度合并字典

2023-11-25

我需要合并多个词典,例如,这是我所拥有的:

dict1 = {1:{"a":{"A"}}, 2:{"b":{"B"}}}

dict2 = {2:{"c":{"C"}}, 3:{"d":{"D"}}}

With A B C and D是树的叶子,就像{"info1":"value", "info2":"value2"}

字典的级别(深度)未知,可能是{2:{"c":{"z":{"y":{C}}}}}

就我而言,它代表一个目录/文件结构,其中节点是文档,叶子是文件。

我想将它们合并以获得:

 dict3 = {1:{"a":{"A"}}, 2:{"b":{"B"},"c":{"C"}}, 3:{"d":{"D"}}}

我不知道如何使用 Python 轻松做到这一点。


这实际上非常棘手 - 特别是如果您想要在事情不一致时收到有用的错误消息,同时正确接受重复但一致的条目(这里没有其他答案可以做到这一点......)

假设您没有大量条目,递归函数是最简单的:

def merge(a: dict, b: dict, path=[]):
    for key in b:
        if key in a:
            if isinstance(a[key], dict) and isinstance(b[key], dict):
                merge(a[key], b[key], path + [str(key)])
            elif a[key] != b[key]:
                raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
        else:
            a[key] = b[key]
    return a

# works
print(merge({1:{"a":"A"},2:{"b":"B"}}, {2:{"c":"C"},3:{"d":"D"}}))
# has conflict
merge({1:{"a":"A"},2:{"b":"B"}}, {1:{"a":"A"},2:{"b":"C"}})

请注意,这会发生突变a- 的内容b被添加到a(也被返回)。如果你想保留a你可以这样称呼它merge(dict(a), b).

agf 指出(如下)你可能有两个以上的字典,在这种情况下你可以使用:

from functools import reduce
reduce(merge, [dict1, dict2, dict3...])

一切都将被添加到dict1.

Note:我编辑了最初的答案以改变第一个参数;这使得“减少”更容易解释

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python中字典的深度合并字典 的相关文章

  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 如何删除 PyCharm 中的项目?

    如果我关闭一个项目 然后删除该项目文件夹 则在 PyCharm 重新启动后 会再次创建一个空的项目文件夹 只需按顺序执行以下步骤即可 他们假设您当前在 PyCharm 窗口中打开了该项目 单击 文件 gt 关闭项目 关闭项目 在 PyCha
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 将 pandas 剪切操作转换为常规字符串

    我明白了 pandas cut 操作的输出 0 0 20 1 0 20 2 0 20 3 0 20 4 0 20 5 0 20 6 0 20 7 0 20 8 0 20 9 0 20 如何将 0 20 转换为 0 20 我正在这样做 str
  • 如何使用 Homebrew 在 Mac 上安装 Python 2 和 3?

    我需要能够在 Python 2 和 3 之间来回切换 我如何使用 Homebrew 来做到这一点 因为我不想弄乱路径并陷入麻烦 现在我已经通过 Homebrew 安装了 2 7 我会用pyenv https github com yyuu
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • Discord.py 嵌入中禁用按钮/冻结按钮

    I m trying to make a replica of this bot in which when I press any of the buttons below it shows a dropdown menu and you
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3
  • 仅允许正小数

    在我的 Django 模型中 我创建了一个如下所示的小数字段 price models DecimalField u Price decimal places 2 max digits 12 显然 价格为负或零是没有意义的 有没有办法将小数
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • 将时间添加到日期时间

    我有一个像这样的日期字符串 然后使用strptime 所以就像这样 my time datetime datetime strptime 07 05 15 m d Y 现在我想添加 23 小时 59 分钟my time 我努力了 timed
  • 如何绘制更大的边界框和仅裁剪边界框文本 Python Opencv

    我正在使用 easyocr 来检测图像中的文本 该方法给出输出边界框 输入图像如下所示 Image 1 Image 2 使用下面的代码获得输出图像 But I want to draw a Single Bigger bounding bo
  • 使用 paramiko 运行 Sudo 命令

    我正在尝试执行sudo使用 python paramiko 在远程计算机上运行命令 我尝试了这段代码 import paramiko ssh paramiko SSHClient ssh set missing host key polic

随机推荐

  • 将 ASP.NET MVC 控制器属性注入到服务层依赖项中?

    我正在使用类似于此中的方法ASP NET MVC 教程你在控制器周围传递一个包装器ModelState集合到验证类中 以便控制器可以访问错误信息 这是一个精心设计的例子 interface IProductValidator void Va
  • 以编程方式关闭Android应用程序[重复]

    这个问题在这里已经有答案了 如何以编程方式关闭我的应用程序 I used finish Or android os Process killProcess android os Process myPid Or System exit 0
  • 是否可以在命令提示符中创建具有多个选项卡的 CSV 文件? [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在创建一个可以在显示 2 个选项卡的 Excel 中打开的 csv 文件 然而 问题是我编写的脚本必须位于批处理文件 命令提示符 中 我在网上看到了一些方法 但它们都是JAVA程序 我不确定
  • 如何在 Selenium 中自动接受 Chrome 的“始终在关联应用程序中打开这些类型的链接”对话框

    我正在使用 Selenium 和 C 进行自动化测试 并且需要从浏览器打开一个外部应用程序 问题是 我总是收到此通知 它会阻止测试执行 有谁知道如何处理这个问题 Chrome 将接受协议处理程序的设置存储在用户配置文件中 从 Seleniu
  • 使用 Cython 包装 C++ 类时处理指针

    我在使用 cython 处理指针时遇到问题 该类的 cython 实现持有一个指向该类的 C 实例的指针Person 这是我的 pyx file 人 pyx cdef class PyPerson cdef Person pointer d
  • PLSQL 中的反思?

    我正在编写一个过程来处理存储在 ANYDATA 中的用户定义对象 对象类型和属性名称只能在运行时知道 因此我无法在声明部分为其定义变量 在Java中 我可以使用反射来处理它 我可以知道类名和字段名 然后我可以通过反射访问这些字段 有没有办法
  • 保留 SVG 文本的纵横比

    这是经过编辑的副本https stackoverflow com questions 29105120 preserve aspect ratio for svg text and react to javascript touch eve
  • 在 Java 中的 Mac Os X 上获取网络摄像头流 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想获取我的 Macbook 集成 iSight 网络摄像头 的网络摄像头流 我使用 Java 并且对 Objective C 一无所知 所以我正在寻找一个 完整的 java 解
  • FragmentPagerAdapter getItem 位置错误

    我的 FramentPageAdapter 有一个奇怪的问题 MainActivity java SuppressLint ValidFragment public class MainActivity
  • Swift:以 NSException 类型的未捕获异常终止

    我正在开发一个简单的应用程序 当我单击注册用户时 该应用程序将被终止 请帮我解决这个问题 它说 由于未捕获的异常 NSUnknownKeyException 而终止应用程序 原因 setValue forUndefinedKey 这个类不是
  • 在 C# 和 Mysql 中使用预准备语句

    我在程序中尝试了准备好的语句 但不起作用 注释的部分是Prepared Statement 部分 当我把它改成正常的语句时 一切都正确了 有人能告诉我我错过了什么吗 非常感谢 private void btnLogin Click obje
  • 模拟服务器请求 Android Espresso UI 测试

    我正在使用 Espresso 为我的 Android 应用程序编写 UI 测试 并且想使用 MockWebServer 模拟 http 请求 我需要在运行测试之前模拟身份验证响应并登录用户 有没有办法让应用程序使用mockwebserver
  • C# 中的代理/邮箱处理器使用新的 async/await

    这个问题结合了两个我不完全理解的主题 阅读通过paper关于 F 中的异步 我遇到了 Agents MailboxProcessors 主题 它可用于实现反应式状态机 C 5 中新的 async await 功能是否可以用于在 C 中实现类
  • 如何从控制器方法重定向到路由

    我在控制器中定义了一个方法 首先检索输入 如果我的数据库中存在电子邮件字段 我想返回一个视图 但是 如果电子邮件字段不存在 我想重定向到另一条路线 我也想将输入传递给该路线 为了更好地理解我的意思 我的控制器代码如下 public func
  • 更改 matplotlib imshow() 图表轴上的值

    假设我有一些输入数据 data np random normal loc 100 scale 10 size 500 1 32 hist np ones 32 20 initialise hist for z in range 32 his
  • gnuplot:标签部分中的斜体

    对于这个 可能 基本问题感到抱歉 但我刚刚开始使用 gnuplot 我想要创建一个轴标签 其中一部分以斜体显示 就像是 xlabel 不是斜体 斜体 我知道设置标签显示斜体很容易 设置xlabel字体 Times Italic 20 但是是
  • Vista 上的 BDE 初始化失败(错误 $2501)

    我有一个用 Delphi 2007 编写的小型 datasnap 服务器 用于访问 BDE 它在 Windows 2000 和 XP 上运行良好 但在 Vista 上时不时 实际上经常 我收到错误消息 尝试初始化 Borland 数据库引擎
  • Android 中无法播放视频

    视频在下面提到的代码中无法正常工作 这可能是什么问题 MediaController mediaController new MediaController getBaseContext mediaController setAnchorV
  • 如何检测 UIImageView 的触摸事件?

    我在导航栏上放置了一个图像 UIImageView 现在我想检测触摸事件并想要处理该事件 我怎样才能做到这一点 实际上 不要这样做 而是在 UIImageView 上添加一个具有自定义样式的按钮 除非指定图像 否则没有按钮图形 然后附加您想
  • Python中字典的深度合并字典

    我需要合并多个词典 例如 这是我所拥有的 dict1 1 a A 2 b B dict2 2 c C 3 d D With A B C and D是树的叶子 就像 info1 value info2 value2 字典的级别 深度 未知 可