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

Python实现函数结果按参数分组存字典的更优方法?

按函数执行结果分组参数的最优实现方案

方案1:使用collections.defaultdict(最推荐,性能最优)

无需手动判断键是否存在,底层自动处理初始化逻辑,全程列表原地修改无拷贝开销:

from collections import defaultdict

resultsdict = defaultdict(list)
for item in collection:
    result = func(item)
    resultsdict[result].append(item)

如果需要最终得到普通字典而非defaultdict对象,最后补充一行resultsdict = dict(resultsdict)即可。

方案2:使用字典原生setdefault方法(无需导入依赖)

不需要引入额外模块,同样避免了显式的if-else判断,也没有列表拷贝的性能问题:

resultsdict = {}
for item in collection:
    result = func(item)
    resultsdict.setdefault(result, []).append(item)

setdefault的逻辑是:如果键result存在就返回对应的列表,不存在就先把该键的值设为空列表再返回,所以可以直接调用append原地添加元素。

其他说明

你提到的三元表达式写法每次都会生成新的列表对象,当collection数据量较大时,内存开销和执行效率都会明显低于上面两种方案,不建议使用。

补充一种场景受限的实现:如果允许先对参数集合排序,可以用itertools.groupby,但该方法要求相同结果的参数必须连续排列,需要额外排序开销,仅适合本身就有序或者需要排序结果的场景:

from itertools import groupby
resultsdict = {
    k: list(v) 
    for k, v in groupby(sorted(collection, key=func), key=func)
}

注意该方法会调用两次func(排序一次、分组一次),如果func本身执行开销大,会进一步拉低性能。

内容的提问来源于stack exchange,提问作者hpchavaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:27:05