我有一本深度未知的大型嵌套字典,我想知道如何找到导致该值的键。例如...
{'furniture':{'chair':{'sofa':{'cushion':{}}}}}
理想情况下,我正在寻找的是确定我输入的值的路径的函数。我已经尝试过在线研究,这就是我尝试过的...
def route(d,key):
if key in d: return d[key]
for k,v in d.items():
if isinstance(v,dict):
item = route(v, key)
if item is not None:
return item
这将返回键内的项目。我希望能够提取导致该项目的路径。例如,route(dictionary,'sofa')
然后我将能够获得预期的输出或类似的结果...
{'sofa':{'chair':'furniture'}}
我可以通过哪些方式实现这一目标?谢谢您的帮助
答案 0 :(得分:3)
您可以递归执行此操作,并返回将您引向目标键的键列表:
def route(d, key):
if key in d: return [key]
for k, v in d.items():
if type(v) == dict:
found = route(v, key)
if found: return [k] + found
return []
如果我们在以下字典上运行它:
data = {
'furniture': {
'chair': {
'sofa': {
'cushion': {}
}
}
},
'electronics': {
'tv': {
'samsung43': 800,
'tcl54': 200
}
}
}
print(route(data, 'cushion'))
print(route(data, 'tcl54'))
print(route(data, 'hello'))
我们得到以下输出:
['furniture', 'chair', 'sofa', 'cushion']
['electronics', 'tv', 'tcl54']
[]