来自嵌套列表的嵌套字典

2024-04-26

我有嵌套列表,例如:

[['A', 'A1'], ['A1', 'B', 'C'], ['B', 'B1', 'B2'], ['B1', 'b1', 'b2', 'b3',
 'B2', 'd1', 'd2', 'd3', 'd4'], ['C', 'C1', 'C2', 'C3'], ['C1', 'a1', 'a2', 'a3','C2', 'n1', 'n2', 'n3', 'n4','C3', 'x1', 'x2', 'x3', 'x4']]

我想创建嵌套字典,例如:

{'A': {'A1': {'B': {'B1': {'b1': {}, 'b2': {}, 'b3': {}},
                    'B2': {'d1': {}, 'd2': {}, 'd3': {}, 'd4': {}}},
              'C': {'C1': {'a1': {}, 'a2': {}, 'a3': {}},
                    'C2': {'n1': {}, 'n2': {}, 'n3': {}, 'n4': {}},
                    'C3': {'x1': {}, 'x2': {}, 'x3': {}, 'x4': {}}}}}}                                                                                   

or:

{'A': {'A1': {'B': {'B1': ['b1', 'b2' 'b3', 'b4'],
                    'B2': ['d1', 'd2', 'd3', 'd4']},
              'C': {'C1': ['a1', 'a2', 'a3'],
                    'C2': ['n1', 'n2', 'n3', 'n4'],
                    'C3': ['x1', 'x2', 'x3', 'x4']}}}                        

我尝试过类似的事情。

d = {}
for path in in nested_list:                                                
    current_dict = d                                                    
     for part in path:                                                            
          if part not in current_ dict:                                    
                current_dict [part]={}                                                         

但没有得到想要的结果

示例文件

[1.txt](https://i.stack.imgur.com/dIYmb.jpg[2.txt(https://i.stack.imgur.com/brDUz.jpg)[3.txt(https://i.stack.imgur) .com/HaTwd.jpg) https://i.stack.imgur.com/dIYmb.jpg%5B2.txt(https://i.stack.imgur.com/brDUz.jpg)%5B3.txt(https://i.stack.imgur.com/HaTwd.jpg) 4.txt https://i.stack.imgur.com/Teecd.jpg 5.txt https://i.stack.imgur.com/mcwLd.jpg


编辑注释:在我给出这个答案后,您已经更改了问题中的输入。以下解决方案适用于您的旧输入,其中列表列表为:

[['A', 'A1'], ['A1', 'B', 'C'], ['B', 'B1', 'B2'], ['B1', 'b1', 'b2', 'b3'],
 ['B2', 'd1', 'd2', 'd3', 'd4'], ['C', 'C1', 'C2', 'C3'], ['C1', 'a1', 'a2', 'a3'],
 ['C2', 'n1', 'n2', 'n3', 'n4'], ['C3', 'x1', 'x2', 'x3', 'x4']]

假设您的列表列表存储在变量中l,您可以使用以下for循环使用字典映射构建欲望字典p跟踪每个键的父节点:

d = {}
p = {}
for k, *s in l:
    r = p.get(k, d)[k] = {i: {} for i in s}
    p.update({i: r for i in s})

d会成为:

{'A': {'A1': {'B': {'B1': {'b1': {}, 'b2': {}, 'b3': {}},
                    'B2': {'d1': {}, 'd2': {}, 'd3': {}, 'd4': {}}},
              'C': {'C1': {'a1': {}, 'a2': {}, 'a3': {}},
                    'C2': {'n1': {}, 'n2': {}, 'n3': {}, 'n4': {}},
                    'C3': {'x1': {}, 'x2': {}, 'x3': {}, 'x4': {}}}}}}

要使叶节点成为列表,可以从下往上遍历树并使用集合m跟踪子节点,以便您可以使用设置差异来查找所有顶部节点以添加到主字典中d到底:

p = {}
m = set()
while l:
    k, *s = l.pop()
    p[k] = {i: p[i] for i in s} if all(i in p for i in s) else s
    m.update(s)
d = {i: p[i] for i in p.keys() - m}

d会成为:

{'A': {'A1': {'B': {'B1': ['b1', 'b2', 'b3'],
                    'B2': ['d1', 'd2', 'd3', 'd4']},
              'C': {'C1': ['a1', 'a2', 'a3'],
                    'C2': ['n1', 'n2', 'n3', 'n4'],
                    'C3': ['x1', 'x2', 'x3', 'x4']}}}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自嵌套列表的嵌套字典 的相关文章

随机推荐

  • Windows 相当于 Mac OS X“打开”命令

    刘畅在这里问了一个与此非常相似的问题 Linux 相当于 Mac OS X 打开 命令 https stackoverflow com questions 264395 linux equivalent of the mac os x op
  • C#中如何终止线程?

    我想尝试使用 C 进行线程处理 我了解一些有关 C 线程处理的知识 所以我只是想问我是否想终止一个线程 我应该这样做smt Abort 或者函数结束后它会 自杀 另外 有没有类似的东西pthread exit 在 C 中 在 C 中 Thr
  • 如何在 C++ MPI 代码中放置检查点?

    根据容错系统 https www elsevier com books fault tolerant systems koren 978 0 12 088525 1 第 6 章 由 Israel Koren 和 C Mani Krishna
  • String类中的线程安全

    使用局部变量构建字符串是否是线程安全的String像下面的方法中的类 假设从多个线程调用以下方法 public static string WriteResult int value string name return string Fo
  • 如何使用 React-Native-fs 读取 JSON 文件

    我有一个包含内容的 asset json 文件 需要在反应本机应用程序中读取它 我已经认为它必须手动复制到本机实现 并且我可以验证文件是否存在 并且可读 rw r r 由于它在那里并且我正在使用承诺来获取它 请告诉我输出何时仍然 40 0
  • 如何在调整窗口大小时使 Tkinter 消息展开?

    我正在尝试获取 tkinter 消息小部件 以便在调整窗口大小时使单词移动 现在 窗口是一个小块 文本行是一个丑陋的块 我怎样才能让它扩大 这是我的代码 root Tk Message text This is a Tkinter mess
  • 创建自定义 HTML 标签安全吗?

    我正在阅读一种可以创建自定义 HTML 标签的技术 如下所示 鉴于存在多种浏览器和浏览器版本 我想知道 创建自定义标签安全吗 如果不是 正确的解决方法是什么 我只是好奇 真的 不 不推荐这样做 除非你有某种填充材料 大多数浏览器不支持它 请
  • 如何使用 core.async 在 Clojure 中写入日志文件?

    我想使用 core async 作为写入文件的记录器 因此我创建了一个 test txt 文件 将其粘贴在我的资源文件夹中并编写了以下代码 use clojure java io use clojure core async def pri
  • 在仍然有许多活动事务的情况下执行 pg_dump

    作为主题 当数据库中仍然有许多活动事务时 备份文件会发生什么情况 它导出实时还是仅导出部分备份 提前致谢 pg dump 在可序列化事务中运行 因此它会看到数据库的一致快照 包括系统目录 但是 如果有人在转储启动时执行 DDL 更改 则可能
  • 添加两个 2D NumPy 数组,忽略其中的 NaN

    将 numpy nan 作为缺失值添加 2 个 numpy 数组 a 和 b 均为 2D 的正确方法是什么 a b or numpy ma sum a b 由于输入是二维数组 因此您可以将它们沿第三轴堆叠np dstack http doc
  • 在 Mac OS X 上使用 pip 安装 pyopencv

    我正在尝试在 OS X Mountain Lion 中使用 pip 安装 pyopencv 但导入 setuptools 失败 以下是我的作品 setuptools中的 库 是什么 我以前没见过 我已经通过 homebrew 和其他东西安装
  • 更改 Oracle 11g 或 12c 中的表/列/索引名称大小

    我使用oracle 11g并且需要名称大小大于30个字符 我知道11g中的最大大小是30个字符 我可以更改这个最大尺寸吗 Oracle 12c 中表 列 索引名称的最大大小是多少 数据库对象名称位于11g https docs oracle
  • RDS不支持创建以下组合的数据库实例

    我正在尝试弄清楚如何创建一个简单的数据库实例 到目前为止我只有一个DBSubnetGroup and DBInstance 此时 根据我尝试使用模板 在 Designer 中创建 创建堆栈时遇到的错误 我已经弄清楚了一些事情 我现在遇到了一
  • 在Python中写入文件之前如何确保文件存在或可以创建?

    我正在编写一个函数 我希望它能够touch一个文件 以便我可以写入该文件 如果该文件不存在 我会收到错误消息 我怎么能这么说呢 只需打开要写入的文件 如果该文件不存在 则会创建该文件 假设您具有写入该位置的适当权限 f open some
  • 使用 css 和 javascript 在 div 背景中创建透明窗口

    我正在尝试在网页中实现效果 网页必须完全被带有透明窗口的背景覆盖 该窗口基本上会突出显示页面的某些页面以吸引用户的注意力 窗口的大小事先是未知的 效果必须在前端实现 所以我可以自由地使用html css和js 我不知道如何仅使用 css 来
  • 英特尔® 事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?

    我在Intel的页面上找到了 https ark intel com products 97123 Intel Core i5 7500 Processor 6M Cache up to 3 80 GHz https ark intel c
  • ASP.NET 网站管理工具未知错误 ASP.NET 4 VS 2010

    我正在关注MVCMusic http mvcmusicstore codeplex com 使用具有完整 sql server 2008 r2 的机器的教程 和完整的视觉工作室专业 在ASP NET 4 0当我到达设置会员资格的页面 靠近第
  • Cordova 图像选择器转换为 base64

    我在将图像转换为使用以下命令选择的 base64 格式时遇到问题ngCordova 图像选择器 http ngcordova com docs plugins imagePicker 为了简单起见 Cordova 网站上提供的代码 有效 是
  • Swift 3 上的通知中心问题[重复]

    这个问题在这里已经有答案了 我正在学习 Swift 3 并且正在尝试使用NSNotificationCenter 这是我的代码 func savePost let postData NSKeyedArchiver archivedData
  • 来自嵌套列表的嵌套字典

    我有嵌套列表 例如 A A1 A1 B C B B1 B2 B1 b1 b2 b3 B2 d1 d2 d3 d4 C C1 C2 C3 C1 a1 a2 a3 C2 n1 n2 n3 n4 C3 x1 x2 x3 x4 我想创建嵌套字典 例