如何在Python嵌套字典中根据值获取外层字典的键?
根据嵌套字典内层值获取外层键的解决方法
你原来的代码失效原因很明确:valueList里的元素是完整的内层字典,不是单个值,所以用index('y')根本找不到目标内容。下面是几种实用的解决方法:
方法一:基础循环遍历
直接遍历外层字典的键与对应内层字典,检查目标值是否存在于内层字典的值集合中:
def get_outer_key(dictionary, target_val): for outer_key, inner_dict in dictionary.items(): if target_val in inner_dict.values(): return outer_key # 未找到时返回None,也可根据需求抛出异常 return None # 测试示例 dictionary = { 1 : {'foo':'bar', 'boo':'car', 'moo':'jar'}, 2 : {'a':'x', 'b':'y', 'c':'z'}, 3 : {'do': 're', 'me': 'fa', 'so': 'la'} } print(get_outer_key(dictionary, 'y')) # 输出:2
方法二:简洁生成器表达式
追求代码简洁的话,可以用生成器配合next()函数一行实现:
dictionary = { 1 : {'foo':'bar', 'boo':'car', 'moo':'jar'}, 2 : {'a':'x', 'b':'y', 'c':'z'}, 3 : {'do': 're', 'me': 'fa', 'so': 'la'} } target = 'y' result = next((k for k, v in dictionary.items() if target in v.values()), None) print(result) # 输出:2
额外说明
- 如果有多个外层键对应的内层字典包含同一个目标值,上述方法只会返回第一个匹配的键。若要获取所有匹配键,可改用列表推导式:
all_matching_keys = [k for k, v in dictionary.items() if target in v.values()] - 若能确保目标值一定存在,可去掉
next()的第二个参数(未找到时会抛出StopIteration异常)。
内容的提问来源于stack exchange,提问作者bbarden
相关产品推荐
相关产品推荐

