gpt4 book ai didi

python - 在嵌套字典 python 中搜索值

转载 作者:太空狗 更新时间:2023-10-29 19:32:57 27 4
gpt4 key购买 nike

搜索值并获取父字典名称(键):

Dictionary = {dict1:{
'part1': {
'.wbxml': 'application/vnd.wap.wbxml',
'.rl': 'application/resource-lists+xml',
},
'part2':
{'.wsdl': 'application/wsdl+xml',
'.rs': 'application/rls-services+xml',
'.xop': 'application/xop+xml',
'.svg': 'image/svg+xml',
},
'part3':{...}, ...

dict2:{
'part1': { '.dotx': 'application/vnd.openxmlformats-..'
'.zaz': 'application/vnd.zzazz.deck+xml',
'.xer': 'application/patch-ops-error+xml',}
},
'part2':{...},
'part3':{...},...

},...

在上面的字典中,我需要搜索如下值:"image/svg+xml"。其中,字典中没有重复的值。如何搜索"image/svg+xml"?这样它应该返回字典 { dict1:"part2"} 中的父键。

请注意:未经修改的解决方案应该适用于 Python 2.7 和 Python 3.3。

最佳答案

这是一个简单的递归版本:

def getpath(nested_dict, value, prepath=()):
for k, v in nested_dict.items():
path = prepath + (k,)
if v == value: # found value
return path
elif hasattr(v, 'items'): # v is a dict
p = getpath(v, value, path) # recursive call
if p is not None:
return p

例子:

print(getpath(dictionary, 'image/svg+xml'))
# -> ('dict1', 'part2', '.svg')

要生成多个路径(仅限 Python 3 的解决方案):

def find_paths(nested_dict, value, prepath=()):
for k, v in nested_dict.items():
path = prepath + (k,)
if v == value: # found value
yield path
elif hasattr(v, 'items'): # v is a dict
yield from find_paths(v, value, path)

print(*find_paths(dictionary, 'image/svg+xml'))

关于python - 在嵌套字典 python 中搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22162321/

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