如果嵌套列表中有值,则获取父键(dict_values)

问题描述 投票:-1回答:2

我有一本看起来像这样的字典:

{'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'}}

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

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。根据下面的Daniel F,这是一张列表!

python python-3.x dictionary for-loop if-statement
2个回答
4
投票

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

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

现在就像访问一样简单>>

names['Co']

如果您真的只想进行一次查找而不创建反向字典,则将next与生成器一起使用:

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

3
投票

我想解释一下为什么您的第一种方法无法按预期工作并提供最小的更改维修。您的groups是dict,键为str s,值为dict s,因此位于for循环内:

© www.soinside.com 2019 - 2024. All rights reserved.