如果值在嵌套列表中(dict\u values),则获取父键

2024-03-28 13:32:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本这样的字典:

{'7D': {'category': 'C', 'directory': 'C', 'name': 'Co'},
 '37': {'category': 'C', 'directory': 'C', 'name': 'FI'},
 'AA': {'category': 'F', 'directory': 'F', 'name': 'Le'},
 '80': {'category': 'Cl', 'directory': 'F', 'name': 'AV'},
 'F7': {'category': 'Cl', 'directory': 'F', 'name': 'AG'}}

如果lookup_value = 'Co',我想得到7D。我试过这两种方法:

lookup_value = 'Co'
for name, val in groups.items():
    if val == lookup_value:
        print(name)

还有这个:

print(list(groups.keys().[list(groups.values()).index(lookup_value)])

第二个返回:

 ValueError: 'Co' is not in list

编辑:

很抱歉弄得一团糟,我想最初的字典没有嵌套字典。事实证明,这是一个列表,可以从下面观察到:

bbb = groups.values()
type(bbb)

返回dict_values。这原来是一个列表,根据丹尼尔F下面!你知道吗


Tags: namein列表字典valueclvallookup
2条回答

一般来说,字典用于单向查找。如果您发现自己经常进行反向查找,那么创建和维护反向字典可能是值得的:

groups = {...}
names = {v['name']: k for k, v in groups.items()}

现在只需访问

names['Co']

如果您真的只需要一次查找而不创建反向dict,请将next与生成器一起使用:

next(k for k, v in groups.items() if v['name'] == 'Co')

我想解释为什么您的第一种方法不能按预期工作,并提供最小的更改修复。 您的groups是dict,键是str,值是dict,因此在for循环中:

for name, val in groups.items():

valdict例如:{'category': 'C', 'directory': 'C', 'name': 'Co'}询问python关于strdict之间的相等(==)会导致回答:否。正确的问题是:'Co'dict的值内吗?更改后,您的代码将正常工作:

lookup_value = 'Co'
for name, val in groups.items():
    if lookup_value in val.values():
        print(name)

输出:

7D

相关问题 更多 >