如何在值含列表的唯一映射字典中根据元素获取对应键?
Python中从值(含列表/单个元素)反向查找唯一键的最优写法
当字典的值可能是单个元素或列表,且所有键与值(包括列表内元素)均唯一时,如何根据输入元素快速找到对应的键?示例场景如下:
my_dict = { 'key1': ['a', 'b', 'c'], 'key2': ['d', 'e'], 'key3': ['f'], 'key4': 'g' } identifier = 'a' # 期望得到结果:'key1'
方案1:构建反向映射字典(推荐多次查找场景)
因为所有值唯一,我们可以预先构建一个值到键的反向字典,后续查找只需O(1)时间,效率最高:
# 构建反向映射 reverse_map = {} for key, value in my_dict.items(): if isinstance(value, list): for item in value: reverse_map[item] = key else: reverse_map[value] = key # 执行查找 identifier = 'a' print(reverse_map.get(identifier)) # 输出: key1
方案2:生成器表达式单次查找
如果仅需单次查找,无需构建额外字典,用生成器表达式直接遍历匹配即可,更节省内存:
identifier = 'a' result = next(key for key, val in my_dict.items() if (isinstance(val, list) and identifier in val) or val == identifier) print(result) # 输出: key1
关于原字典类型的说明
原字典用来存储分组映射完全合理,结合反向映射既保留了原结构的可读性,又实现了高效的反向查找,是这类场景的常规处理方式。
内容的提问来源于stack exchange,提问作者KingOtto
相关产品推荐
相关产品推荐

