如何按逗号拆分字典键并实现列表值的映射匹配?
问题解决:字典映射与列表值转换
一、需求与输入输出示例
原始字典
my_dict = { 'Incident, INC': 'Incident', 'SR, Service Request': 'Service Request', 'RCA ticket, Task': 'Problem', 'OCM, Alert': 'Change', 'Change': 'Minor enhancements' }
期望生成的映射字典
expected_dict = { 'INC': 'Incident', 'Incident': 'Incident', 'Inc': 'Incident', 'Change': 'Minor Enchancement', 'SR': 'ServiceRequest', 'ServiceRequest': 'ServiceRequest' }
处理规则与示例
- 读取输入列表,若元素匹配映射字典的键,返回对应值;否则返回
Unspecified(示例中用others) - 输入列表:
new_list = ['Incident','INC','SR','Change','ABC']
- 期望输出:
result_list = ['Incident','Incident','ServiceRequest','Minor Enchancement','others']
注:你提供的期望输出存在对应关系错误,已修正为符合映射字典的正确结果
二、现有代码问题
你当前的代码逻辑完全反向,且未覆盖需求中的特殊规则(如缩写补充、空格转驼峰、拼写修正):
reversed_dict = {} for key in my_dict: items = [x.strip() for x in my_dict[key].split()] for i in items: reversed_dict[i] = key
三、解决方案代码
以下是实现需求的完整代码:
# 1. 构建符合要求的映射字典 my_dict = { 'Incident, INC': 'Incident', 'SR, Service Request': 'Service Request', 'RCA ticket, Task': 'Problem', 'OCM, Alert': 'Change', 'Change': 'Minor enhancements' } mapping_dict = {} # 处理原始字典的键值对 for original_keys, target_value in my_dict.items(): # 拆分原始键为多个关键词 keys = [k.strip() for k in original_keys.split(',')] for k in keys: # 处理Service Request转成ServiceRequest的特殊规则 if k == 'Service Request': camel_case_key = ''.join(word.capitalize() for word in k.split()) mapping_dict[camel_case_key] = camel_case_key mapping_dict['SR'] = camel_case_key # 处理Change对应的拼写修正(enhancements -> Enchancement) elif k == 'Change': mapping_dict[k] = 'Minor Enchancement' # 处理Incident相关的键和缩写 elif k in ['Incident', 'INC']: mapping_dict[k] = 'Incident' # 补充缩写Inc的映射 mapping_dict['Inc'] = 'Incident' # 2. 处理输入列表的函数 def process_list(input_list): return [mapping_dict.get(item, 'others') for item in input_list] # 测试输入 new_list = ['Incident','INC','SR','Change','ABC'] result_list = process_list(new_list) print(result_list)
代码说明
- 手动处理需求中的特殊规则:
Service Request转驼峰ServiceRequest、Change对应值修正拼写、补充Inc缩写映射 - 使用字典的
get方法简化列表遍历逻辑,默认返回others - 严格对应期望映射字典的键值关系
内容的提问来源于stack exchange,提问作者user9093941
相关产品推荐
相关产品推荐

