You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 07:45:29