gpt4 book ai didi

Python - 返回与字符串匹配的所有 JSON 元素的路径

转载 作者:行者123 更新时间:2023-12-03 09:17:32 24 4
gpt4 key购买 nike

我正在尝试在 Python 中逻辑遍历 JSON 并返回等于某个值的任何字符串值的路径。我试图递归地遍历它,但如果多个元素与比较匹配,它只首先返回他:

test_json = {
"a": {
"b": {
"c": {
"d": "foo"
}
}
},
"1": {
"2": {
"3": "bar"
}
},
"a1" : "foo"
}

def searchDict(d, path):
for k,v in d.iteritems():
if isinstance(v, dict):
path.append(k)
return searchDict(v, path)
else:
if v == "foo":
path.append(k)
path.append(v)
return path

print searchDict(test_json, [])

我希望它能够返回如下内容:

a -> b -> c -> d -> foo
a1 -> foo

但它只迭代第一个子词典:

['a', 'b', 'c', 'd', 'foo']

这可能比我做的要容易,只是在逻辑上解决它时遇到困难。有什么想法吗?

最佳答案

多好的问题啊。实际上,您距离自己解决这个问题还差一点点。

  1. 附加到路径变量将导致在所有递归调用中使用相同的变量。使用 path + [k] 可以解决这个问题。如果很难尝试使用您的代码并在 searchdict 函数开头打印出路径
  2. 您正确地使用 for 循环来迭代 json 文件。然而,您也会返回到 forcycle 内部,这将阻止它并且不会探索其他可能性。打印结果,将其添加到结果字段或使用 python 的生成器来获取结果

查看我修改后的工作代码。尝试对代码进行尽可能少的更改,以便易于理解。

test_json = {
"a": {
"b": {
"c": {
"d": "foo"
}
}
},
"1": {
"2": {
"3": "bar"
}
},
"a1" : "foo"
}

def searchDict(d, path):
for k,v in d.iteritems():
if isinstance(v, dict):
searchDict(v, path + [k])
else:
if v == "foo":
print(path + [k] + [v])


searchDict(test_json, [])

关于Python - 返回与字符串匹配的所有 JSON 元素的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com