如何找到一个键的值在一个嵌套的字典与列表?



我需要解析一些非常奇怪的json有效负载,我完全卡住了。

假设我有一个嵌套的列表字典,看起来像这样:

test_dict1 = {
"blah":"blah", 
"alerts": [{"test1":"1", "test":"2"}], 
"foo": {
"foo":"bar", 
"foo1": [{"test3":"3"}]
}}

是否有一个函数能够给我键test3的值?或者是键test3

第一次出现时的第一个值Edit我的意思是我可以搜索键test3的函数,因为我主要关心键和我可以得到的不同字典可能有不同的结构

由于您不知道值的内部有多深,因此可能建议使用递归函数遍历所有层,直到找到它。我在下面使用了DFS

def search(ld, find):
if(type(ld)==list):
for i in ld:
if(type(i)==list or type(i)==dict):
result=search(i, find)
if(result!=None): return result
elif(type(ld)==dict):
try:
return ld[find]
except(KeyError):
for i in ld:
if(type(ld[i])==list or type(ld[i])):
result=search(ld[i], find)
if(result!=None): return result
else:
return None
test_dict1 = {
"blah":"blah",
"alerts": [{"test1":"1", "test":"2"}],
"foo": {
"foo":"bar",
"foo1": [{"test3":"3"}]
}}
print(search(test_dict1, "test3"))

就像访问其他嵌套结构一样:

test_dict1["foo"]["foo1"][0]["test3"]

还有,第一次出现是什么意思?字典没有特定的顺序,所以这对你没有多大帮助。

如果你只想要test3的值,那么你可以这样得到它,

test_dict1["foo"]["foo1"][0]["test3"]

但是如果你想要动态的值,那么它将用不同的方法来完成。看,当你使用字典和索引时,当涉及到列表时,你可以使用键名。

相关内容

  • 没有找到相关文章