Python如何按条件分组列表元素并优化代码以提升性能?
优化方案
方法一:使用映射字典 + collections.defaultdict
这种方法通过预定义类型映射,结合defaultdict自动初始化列表,既提升了代码的可维护性,又保证了高效的执行性能:
from collections import defaultdict all_values = [ {"a": "first_type"}, {"a": "second_type"}, {"a": "second_type"}, {"a": "third_type"} ] # 定义类型到目标键的映射 type_mapping = { "first_type": "first", "second_type": "second", "third_type": "third" } sorted_objs = defaultdict(list) for obj in all_values: # 通过映射快速获取目标键,O(1)时间复杂度 key = type_mapping[obj["a"]] sorted_objs[key].append(obj) # 若需要转为普通字典(可选,defaultdict已具备字典的所有功能) sorted_objs = dict(sorted_objs)
核心优势
- 性能更优:字典查找是O(1)操作,相比原代码的多条件判断,在类型数量较多或列表极长时,能显著减少每次迭代的计算开销。
- 可扩展性强:新增类型只需在
type_mapping中添加键值对,无需修改循环内的条件逻辑,代码维护成本更低。 - 代码更简洁:避免了冗长的
if-elif链,逻辑清晰易懂。
处理未知类型的可选方案
如果all_values中可能存在未定义的类型,可以添加容错处理,例如忽略未知类型或归类到默认分组:
for obj in all_values: type_str = obj["a"] # 若类型不在映射中,使用默认键或跳过 key = type_mapping.get(type_str, "unknown") if key != "unknown": sorted_objs[key].append(obj)
内容的提问来源于stack exchange,提问作者ifeeltiredboss
相关产品推荐
相关产品推荐

