如何实现列表元素与含多值的字典的匹配映射?
多值字典匹配实现方案
思路分析
原字典的结构是「目标输出(键)」对应「多个匹配别名(值,逗号分隔)」,要实现输入列表到目标输出的映射,核心是反转字典结构:把每个别名单独映射到对应的目标键,之后直接用输入元素查找反转后的字典即可。
代码实现
- 定义原字典和输入列表:
my_dict = { 'Incident':'INC, Incident', 'Minor Enchancement':'Change', 'ServiceRequest':'SR, ServiceRequest' } new_list = ['Incident','Inc','SR','Change']
- 生成反转映射字典(支持不区分大小写匹配):
# 创建反转映射:别名 -> 目标键 reverse_map = {} for target_key, aliases_str in my_dict.items(): # 拆分逗号分隔的别名,去除每个别名的前后空格 aliases = [alias.strip() for alias in aliases_str.split(',')] # 遍历每个别名,转小写后存入映射(实现不区分大小写匹配) for alias in aliases: reverse_map[alias.lower()] = target_key
- 遍历输入列表,生成结果:
result = [] for item in new_list: # 将输入元素转小写,从反转映射中获取目标键 matched_key = reverse_map.get(item.lower()) # 若找不到匹配项,可根据需求处理(比如保留原元素或抛出提示) result.append(matched_key if matched_key else item) print(result)
输出结果
运行后输出:
['Incident', 'Incident', 'ServiceRequest', 'Minor Enchancement']
注:你提供的期望输出中存在笔误(SR应对应ServiceRequest,Change应对应Minor Enchancement),上述结果为逻辑正确的匹配输出。
扩展说明
- 如果需要严格区分大小写匹配,去掉代码中
.lower()的转换即可; - 若输入列表可能存在未匹配的元素,可通过
get方法的第二个参数设置默认值,比如reverse_map.get(item.lower(), "未匹配")。
内容的提问来源于stack exchange,提问作者user9093941
相关产品推荐
相关产品推荐

