Python 3.x 在字典中搜索给定值的键
我在下面有这本词典Python 3.x 在字典中搜索给定值的键,python-3.x,dictionary,Python 3.x,Dictionary,我在下面有这本词典 metric_app_mapper = \ {"appdynamics": { "avgresptime": ["average response time", "avgresptime", "avgrest", "art"], "callspermin": ["calls per minute", "callspermin", "calls/min"], "allapps": [
metric_app_mapper = \
{"appdynamics":
{
"avgresptime": ["average response time", "avgresptime", "avgrest", "art"],
"callspermin": ["calls per minute", "callspermin", "calls/min"],
"allapps": ["all apps", "all apps info", "all applications"]
},
"another_software":
{
"metric": ["synonyms"]
}
}
我正在尝试获取“艺术”值的键。但我只能搜索“艺术”的值或它所在的列表。下面是我的代码
search_key = [j for i in metric_app_mapper.values() for j in i.values() for k in j if k == "art"]
print("Key found", search_key)
我得到给定值的列表
Key found [['average response time', 'avgresptime', 'avgrest', 'art']]
在这种情况下,我如何为我找到的给定列表中的值获取关联键,而该列表中的给定键是“Appdynamics”?由于我的方法涉及O(n^3)运行时间,有没有更好的方法来实现这一点?这里有一个递归解决方案,可以生成键“路径”。
(*keys,k)
语法在Python版本>=3.5中可用,您也可以使用keys+(k,)
作为对@Jon Clements代码的一点修改,这就是我所需要的
interpreted_tool = [[k1, k2] for k1, v1 in metric_app_mapper.items() for k2, v2 in v1.items() for v3 in v2 if v3 == metric]
试试这个:-
for i,j in metric_app_mapper.items():
for k,l in j.items():
if "art" in l:
print(k,i)
类似于:
[k代表公制中的d\u app\u mapper.values()代表k,v代表d.items(),如果v中的'art',
。。。(未经测试)@JonClements哇!它确实给了我一个子键,即“avgresptime”!
for i,j in metric_app_mapper.items():
for k,l in j.items():
if "art" in l:
print(k,i)