Python如何优化按指定ID顺序从字典列表提取对应元素的代码
优化实现方案
原代码问题分析
- 性能开销大:
match_list.index(val)每次查询都要遍历整个列表,整体时间复杂度为O(n*m),数据量较大时性能下降明显 - 代码冗余,可简化空间大
最优写法(推荐)
先将input1构建为ID到对应字典的映射表,再直接按input2的顺序取值:
# 构建ID映射,时间复杂度O(n) id_map = {item["ID"]: item for item in input1} # 按input2顺序提取结果,自动过滤不存在的ID,时间复杂度O(m) return_list = [id_map[id_val] for id_val in input2 if id_val in id_map]
该写法的优势:
- 整体时间复杂度降到O(n+m),大数据量下性能优势非常突出
- 代码简洁易读,和原逻辑完全一致:
input2中不存在于input1的ID会自动跳过,不会报错 - 内存占用可控,仅多存储了一份ID到字典引用的映射,没有额外复制字典数据
简化写法(仅适合ID完全匹配的场景)
如果你可以确定input2中所有的ID都一定存在于input1中,可以直接写成一行:
return_list = [next(item for item in input1 if item["ID"] == id_val) for id_val in input2]
注意:如果
input2中存在input1没有的ID,该写法会抛出StopIteration异常。
内容的提问来源于stack exchange,提问作者Lihka_nonem
相关产品推荐
相关产品推荐

