我遇到了在嵌套的 Python 字典和列表中查找目标值的路径的问题.例如,我有以下 dict,我的目标值是blah blah blah".
I have an issue of finding the path of the targeted values in a nested python dictionary and list. for example, I have following dict, and my targeted value is "blah blah blah".
{ "id" : "abcde", "key1" : "blah", "key2" : "blah blah", "nestedlist" : [ { "id" : "qwerty", "nestednestedlist" : [ { "id" : "xyz", "keyA" : "blah blah blah" }, { "id" : "fghi", "keyZ" : "blah blah blah" }], "anothernestednestedlist" : [ { "id" : "asdf", "keyQ" : "blah blah" }, { "id" : "yuiop", "keyW" : "blah" }] } ] }我想得到的是这个值在嵌套字典和列表中的路径."nestedlist" - "nestednestedlist" - "keyA"
What I want to get is the path of this value in the nested dictionary and list. "nestedlist" - "nestednestedlist" - "keyA"
我从 在嵌套的 Python 字典和列表中查找所有出现的键并进行了一些更改:
I found this code from Find all occurrences of a key in nested python dictionaries and lists and made some changes:
def find(key,dic_name): if isinstance(dic_name, dict): for k,v in dic_name.items(): if k == 'name' and v == key: yield v elif isinstance(v,dict): for result in find(key,v): yield result elif isinstance(v,list): for d in v: for result in find(key,d): yield result但它只能在结果中获取目标值而不能获取路径.任何人都可以帮忙吗?非常感谢
But it can only get the targeted value in the result but not the path. Can anyone help? Thanks a lot
推荐答案对链接到的代码稍作更改即可产生结果:
a minor change of the code you link to yields the results:
def fun(dct, value, path=()): for key, val in dct.items(): if val == value: yield path + (key, ) for key, lst in dct.items(): if isinstance(lst, list): for item in lst: for pth in fun(item, value, path + (key, )): yield pth对于您的输入:
for item in fun(dct, value='blah blah blah'): print(item) # ('nestedlist', 'nestednestedlist', 'keyA') # ('nestedlist', 'nestednestedlist', 'keyZ')在您的评论后更新:代码的小改动可以做您想要的:
update after your comment: a minor change of the code can do what you want:
def fun(dct, value, path=()): for key, val in dct.items(): if val == value: yield path + (val, ) for key, lst in dct.items(): if isinstance(lst, list): for item in lst: for pth in fun(item, value, path + (dct['id'], key, )): yield pth示例:
for item in fun(dct, value='xyz'): print(item) # ('abcde', 'nestedlist', 'qwerty', 'nestednestedlist', 'xyz')更多推荐
在嵌套的 python 字典和列表中找到目标值的路径
发布评论