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

如何优化重复的函数输出检查及字典填充硬编码逻辑?

优化重复的遍历-函数调用-字典存储逻辑

问题描述

我存在重复的代码块逻辑:遍历输入列表,调用函数获取列表类型的返回值,若返回的列表非空,则将其存入对应字典。示例代码如下:

def some_func(i):
    """ 满足条件返回非空列表,否则返回空列表 """
    return ['abc', 'def'] if i % 2 == 0 else []

i_inputs = [4, 2, 3, 6, 3, 8, 2]
y1 = {}
for i in i_inputs:
    _x = some_func(i)
    if _x: 
        y1[i] = _x

目前代码中有多组此类逻辑,每组对应不同的输入列表、目标字典以及调用函数,示例如下:

i_inputs = [4, 2, 3, 6, 3, 8, 2]
y1 = {}
for i in i_inputs:
    _x = some_func(i)
    if _x: 
        y1[i] = _x

i_inputs2 = [8, 2, 4, 8, 9, 1]
y2 = {}
for i in i_inputs2:
    _x = some_func2(i)
    if _x: 
        y2[i] = _x

i_inputs3 = [4, 8, 2, 9, 9, 1, 5]
y3 = {}
for i in i_inputs3:
    _x = some_func3(i)
    if _x: 
        y3[i] = _x

请问除了硬编码所有输入列表和目标字典的方式外,是否有更优的实现方案?

优化方案

1. 封装通用处理函数

把重复的循环、判断逻辑抽成一个通用函数,传入输入列表和对应的处理函数,直接返回生成的字典:

def process_inputs(input_list, func):
    result = {}
    for item in input_list:
        res = func(item)
        if res:
            result[item] = res
    return result

# 调用示例
y1 = process_inputs(i_inputs, some_func)
y2 = process_inputs(i_inputs2, some_func2)
y3 = process_inputs(i_inputs3, some_func3)

每组逻辑只需一行调用代码,彻底消除重复代码块。

2. 用字典推导式简化(单行实现)

如果追求更简洁的写法,可以用字典推导式替代循环:

y1 = {i: some_func(i) for i in i_inputs if some_func(i)}

注意:如果some_func执行成本较高,这种写法会调用两次函数。可以用生成器表达式先预计算结果,避免重复调用:

y1 = {i: res for i, res in ((i, some_func(i)) for i in i_inputs) if res}

3. 批量处理多组任务

如果要处理的组数很多,可将所有任务参数(输入列表、处理函数)整理成集合,批量生成结果:

# 定义所有任务:(输入列表, 处理函数)
tasks = [
    (i_inputs, some_func),
    (i_inputs2, some_func2),
    (i_inputs3, some_func3)
]

# 批量生成结果,用列表存储所有字典
results = [process_inputs(inp, func) for inp, func in tasks]

# 若需要对应命名的变量,可用字典映射
named_results = {
    "y1": process_inputs(i_inputs, some_func),
    "y2": process_inputs(i_inputs2, some_func2),
    "y3": process_inputs(i_inputs3, some_func3)
}

后续新增任务只需在tasks中添加一行即可,大幅降低维护成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:43:13