Python递归生成依赖流扁平化列表的问题求助
Python递归生成依赖流扁平化列表的问题求助
我现在正尝试生成一个扁平化的依赖列表,输入的数据结构是这样的:
list_of_task_to_generate = [ {"version": "1", "dependency": []}, {"version": "2", "dependency": ["1"]}, {"version": "3", "dependency": ["2"]}, {"version": "4", "dependency": ["3"]}, {"version": "5", "dependency": []}, {"version": "6", "dependency": ["5"]}, ]
我期望得到的输出是:每个版本作为键,对应的值是所有依赖它的后续版本(也就是所有间接或直接依赖当前版本的任务),具体如下:
desire_output = { "1": ["2", "3", "4"], "2": ["3", "4"], "3": ["4"], "4": [], "5": ["6"], "6": [], }
这是我目前写的代码:
from pprint import pprint list_of_task_to_generate = [ {"version": "1", "dependency": []}, {"version": "2", "dependency": ["1"]}, {"version": "3", "dependency": ["2"]}, {"version": "4", "dependency": ["3"]}, {"version": "5", "dependency": []}, {"version": "6", "dependency": ["5"]}, ] def generate_result_recursive(list_of_tasks): result = {} def add_dependencies(task): version = task["version"] dependencies = task["dependency"] if version not in result: result[version] = [] for dep in dependencies: if dep not in result: result[dep] = [] result[dep].append(version) # 尝试过循环查找 for i in list_of_tasks: if i["version"] == dep: add_dependencies(i) # 也尝试过用next的列表推导式 # add_dependencies(next(t for t in list_of_tasks if t["version"] == dep)) for task in list_of_tasks: add_dependencies(task) return result answer = generate_result_recursive(list_of_task_to_generate) pprint(answer)
现在代码运行后得到的结果是这样的:
{ '1': ['2', '2', '2'], '2': ['3', '3'], '3': ['4'], '4': [], '5': ['6'], '6': [] }
可以看到结果里出现了重复的元素,而且没有正确收集到间接依赖的版本。比如键"1"应该对应["2", "3", "4"],但现在却是["2", "2", "2"]。我绞尽脑汁也没找到问题所在,希望大家能帮我看看问题出在哪,谢谢啦 =)
备注:内容来源于stack exchange,提问作者pelos
相关产品推荐
相关产品推荐

