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

实现Python函数:迭代获取作业全层级依赖列表需求问询

作业依赖全层级遍历实现

问题背景

有一个竖线分隔的文本文件,包含job和dependent jobs两列,数据示例如下:

jobA|job1,job2,job3
jobB|job4,job5
job1|jobX,jobY
job2|Null
job3|Null
job4|jobP,jobQ
job5|Null
jobP|jobR
jobQ|Null
jobR|Null
jobX|Null
jobY|jobZ
jobZ|Null

数据规则

  • 每行第一个字段为作业名称,第二个字段是该作业的前置依赖作业,多依赖用逗号分隔
  • Null表示该作业无前置依赖
  • 所有作业均已收录在文件中

需求

编写Python函数,接收作业名称列表作为输入,迭代获取所有层级的前置依赖作业,返回去重后的依赖列表(不含输入的作业本身)。

输入输出示例

  • 输入:['jobA'] → 返回:['job1','job2','job3','jobX','jobY','jobZ']
  • 输入:['jobB'] → 返回:['job4','job5','jobP','jobQ','jobR']
  • 输入:['jobA','jobB'] → 返回:['job1','job2','job3','jobX','jobY','jobZ','job4','job5','jobP','jobQ','jobR']

解决方案

代码实现

def load_job_dependencies(file_path):
    """从竖线分隔文件加载作业依赖映射"""
    dep_map = {}
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line:
                continue
            job, deps = line.split('|', 1)
            if deps.strip() == 'Null':
                dep_map[job] = []
            else:
                dep_map[job] = [d.strip() for d in deps.split(',')]
    return dep_map

def get_all_dependencies(target_jobs, dep_map):
    """获取目标作业的所有层级前置依赖,返回去重后的有序列表"""
    visited = set()
    result = []
    queue = target_jobs.copy()
    
    while queue:
        current_job = queue.pop(0)
        for dep in dep_map.get(current_job, []):
            if dep not in visited:
                visited.add(dep)
                result.append(dep)
                queue.append(dep)
    return result

# 测试用例
if __name__ == '__main__':
    dep_map = load_job_dependencies('jobs.txt')
    print(get_all_dependencies(['jobA'], dep_map))
    print(get_all_dependencies(['jobB'], dep_map))
    print(get_all_dependencies(['jobA', 'jobB'], dep_map))

代码说明

  1. 依赖映射加载:load_job_dependencies函数读取文件并解析为字典,键是作业名,值是该作业的前置依赖列表,自动处理Null为无依赖。
  2. 广度优先遍历:get_all_dependencies用队列实现BFS,确保按层级顺序获取依赖(先直接依赖,再递归获取依赖的依赖);通过visited集合避免重复添加同一依赖,保证结果唯一。
  3. 输出顺序:结果列表的顺序与层级遍历顺序一致,符合示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:12:22