返回包含列表的嵌套字典中的所有路径

1 投票
1 回答
22 浏览
提问于 2025-04-12 17:03

首先,我为我的英语不好而道歉,希望这个问题表达得很清楚。

我需要一个函数,当我调用它时,它能返回一个包含列表的嵌套字典的所有可能路径。

举个例子:

输入变量:

var={"a":"b","c":["d","e",{"f":"","h":["i",{"j":"q"} ]}],"m":"","n":["d","e",{"b":"","c":"","f":"r"}]," r":"r","k":["d","t","h"]} 

输出应该是这样的:

a/b 
c/d 
c/e 
c/f/ 
c/h/i 
c/h/j/q 
m/
n/d
n/e
n/b/
n/c/
n/f/r 
r/r 
k/d 
k/t 
k/h 

注意:

输出的顺序不需要和上面的行一致,但每一行的值必须和上面的一样。每条路径都从最外层字典的键开始,直到无法继续为止。也就是说,比如我们到达了一个不是字典或列表的字典值,或者我们到达了列表中的一个项,但如果我们到达的是一个列表或字典,路径就要继续下去。

1 个回答

2

这段代码是用来做某件事情的,但具体是什么呢?我们可以把它想象成一个小工具,帮助我们完成特定的任务。代码块里可能包含了一些指令,告诉计算机该怎么做。

在编程中,代码就像是给计算机下达的命令。每一行代码都有它的作用,就像我们在厨房里做饭时,每一步都有它的目的,比如切菜、煮水、炒菜等等。

所以,当你看到这样的代码块时,可以把它看作是一个小小的程序,它会按照我们写的指令一步一步地执行,最终完成我们想要的结果。

如果你对代码的具体内容有疑问,可以逐行分析,看看每一行是做什么的,慢慢就能理解它的功能了。

def get_paths(d, path=''):
    paths = []
    for key, value in d.items():
        if isinstance(value, dict):
            paths.extend(get_paths(value, path + key + "/"))
        elif isinstance(value, list):
            for i, item in enumerate(value):
                if isinstance(item, dict) or isinstance(item, list):
                    paths.extend(get_paths(item, path + key + "/"))
                else:
                    paths.append(path + key + "/" + str(item))
        else:
            paths.append(path + key + "/" + str(value) if value else path + key + "/")
    return paths

var={"a":"b","c":["d","e",{"f":"","h":["i",{"j":"q"} ]}],"m":"","n":["d","e",{"b":"","c":"","f":"r"}]," r":"r","k":["d","t","h"]} 


paths = get_paths(var)
for path in paths:
    print(path)

撰写回答