返回包含列表的嵌套字典中的所有路径
首先,我为我的英语不好而道歉,希望这个问题表达得很清楚。
我需要一个函数,当我调用它时,它能返回一个包含列表的嵌套字典的所有可能路径。
举个例子:
输入变量:
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)