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)