如何将具有绝对文件路径的字典转换为类似于文件夹结构的嵌套Dict?

内里克斯

我有一个像这样的字典:

source_dict = {
"/a": {"foo": "bar", "randomstuff": 3},
"/b/a": {"some": "thing", "abc": {"bx": 1}},
"/b/g/h/g": {"any": "value"}
}

路径可能是无限深的,并且它们永远不会以/(以非空“文件夹”形式存储)结尾

几个小时以来,我试图去source_dict像这样的嵌套字典:

final_dict = {"/": {
"a": {"foo": "bar", "randomstuff": 3},
"b": {"a": {"some": "thing", "abc": {"bx": 1}}, "g": {"h": {"g": {"any": "value"}}}}
}}

该值不变。有任何想法吗?

阿贾克斯1234

您可以使用itertools.groupby递归:

from itertools import groupby as gb
def group(d):
  new_d = [(a, list(b)) for a, b in gb(sorted(d, key=lambda x:x[0][0]), key=lambda x:x[0][0])]
  return {a:b[-1][-1] if not b[0][0][1:] else group([(c, k) for [_, *c], k in b]) for a, b in new_d}

source_dict = {"/a": {"foo": "bar", "randomstuff": 3}, "/b/a": {"some":"thing", "else":{"bx": 1}}, "/b/g/h/g": {"any": "value"}}
r = {'/':group([(list(filter(None, a.split('/'))), b) for a, b in source_dict.items()])}

输出:

{'/': {'a': {'foo': 'bar', 'randomstuff': 3}, 'b': {'a': {'some': 'thing', 'else': {'bx': 1}}, 'g': {'h': {'g': {'any': 'value'}}}}}}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将文件路径列表转换为类似于 json 文件的嵌套字典

将文件夹路径的多维数组转换为嵌套文件夹结构数组

文件夹路径-绝对文件夹路径

如何将字典列表转换为类似于嵌套字典的树?

将绝对文件路径转换为相对

如何在realm-react-native中创建嵌套的类似于文件夹的结构?

如何从具有绝对路径的对象数组构造类似于文件系统的JSON

如何将文件夹中的所有odt文件转换为Microsoft Word文件?

如何将.pst批量转换为单个邮件和文件夹结构?

如何将URL数组转换为树/文件夹结构数据?

Java:在JFileChooser中,双击文件/文件夹时如何停止显示绝对文件路径?

如何将具有1x1结构的.mat文件转换为.csv文件?

将普通 JSON 对象转换为类似文件夹的结构的逻辑

绝对文件夹结构中的ModuleNotFoundError

如何将 git 存储库文件夹转换为常规文件夹?

如何将文件夹和子文件夹的列表转换为JSOn FOrmat

如何将文件夹中的所有 PNG 转换为 JPG 以制作视频?

相对文件路径建议不同的文件夹结构?

将共享文件夹路径转换为UNC路径

如何将Qt文件路径从资源转换为绝对路径?

如何将文件夹的内容和树形结构复制到具有相同结构的远程目录中

如何将多个文件夹中的pdf文件转换为与文件夹名称匹配的多个pdf文件

如何将音频文件的文件夹转换为单个文件(遍历多个文件夹)?

如何将具有简单结构的xml文件转换为csv?

将视频转换为新的文件夹结构时,“没有此类文件或目录”

将本地文件夹结构转换为服务器上的文件夹结构

如何将所有文件从txt文件的路径复制到文件夹?

如何将文件夹中的所有JPG文件转换为PDF并将其合并?

将工具输出中的绝对文件路径和行号转换为超链接