Python中如何将嵌套列表映射为可迭代字典生成课程索引映射
问题核心原因
你现有两个核心问题:
- 你正在使用的
course_index是索引到课程名的结构,每次通过课程名找索引都需要遍历所有值,效率极低 - 你尝试的嵌套循环存在语法错误、逻辑错误:
- 遍历字典键值对需要调用
.items()方法,直接遍历course_index只能拿到键 - 相等判断要用
==,你写的=是赋值操作,语法错误 - 循环里的
x和y是临时变量,修改它们不会改变原classes列表的值,自然看不到效果
- 遍历字典键值对需要调用
最简解决方案
首先给course_index做一个反向映射(课程名到索引),单次生成后每次查找都是O(1)效率,之后用列表推导式一行就能生成目标结果:
# 第一步:生成课程名到索引的反向映射,仅需执行一次 name_to_idx = {v: k for k, v in course_index.items()} # 第二步:直接映射生成目标结果 mapped_classes = [[name_to_idx[x], name_to_idx[y]] for x, y in classes]
运行后得到的mapped_classes就是你需要的[[0,1],[2,3],[1,2]]。
额外优化建议
你之前生成course_index的代码效率也可以优化,不需要提前初始化空键、不需要每次遍历values判断是否存在,先建反向映射再转成course_index性能更高:
name_to_idx = {} for x, y in classes: if x not in name_to_idx: name_to_idx[x] = len(name_to_idx) if y not in name_to_idx: name_to_idx[y] = len(name_to_idx) # 转成你需要的索引到课程名的course_index course_index = {v: k for k, v in name_to_idx.items()}
内容的提问来源于stack exchange,提问作者William Merritt
相关产品推荐
相关产品推荐

