Python处理学生ID生成分类字典时如何添加Other分类?
问题解决:按年份+部门分类学生ID字典生成
现有代码核心问题
- 部门映射字典
dptname定义错误,多余了未赋值的Other键,没有缺省匹配逻辑 - 直接使用
dptname[idx[3:5]]取值,当部门编码不在预设映射中时会触发KeyError,无法自动匹配到Other分类 - 年份默认生成的是字符串类型,和示例输出的整数类型年份不一致
修复后完整代码
# 给定学生ID列表,支持替换为任意同格式ID列表 IDs = ['20201199','21121347','20141052','20341121','21241369','21272199','19241187','19101007','20101035', '21121875', '19141534', '19301552', '21141135', '21365001'] result = {} # 仅定义存在对应关系的部门编码映射 dept_map = {'01': 'CSE', '41': 'CS', '21': 'EEE'} for id_str in IDs: # 提取年份,转换为整数和示例格式对齐 year = int('20' + id_str[:2]) # 提取第4、5位的部门编码(索引从0开始,下标3到5左闭右开,刚好取第4、5位) dept_code = id_str[3:5] # 用字典get方法,找不到编码时默认返回Other dept_name = dept_map.get(dept_code, 'Other') # 年份不存在则初始化年份对应的空字典 if year not in result: result[year] = {} # 部门不存在则初始化部门对应的空列表 if dept_name not in result[year]: result[year][dept_name] = [] # 追加当前ID到对应分类 result[year][dept_name].append(id_str) # 打印最终生成的字典 print(result)
关键修改说明
- 用字典的
get()方法处理部门编码匹配:第二个参数为默认返回值,当编码不在dept_map的键中时,自动返回Other,解决未知部门分类的映射需求 - 补充了年份、部门分类的初始化逻辑,避免运行时报错
- 年份转换为整数类型,和示例输出格式完全一致
内容的提问来源于stack exchange,提问作者Tanjim
相关产品推荐
相关产品推荐

