Рекурсивно получить список зависимостей потока в PythonPython

Программы на Python
Ответить
Anonymous
 Рекурсивно получить список зависимостей потока в Python

Сообщение Anonymous »

Я пытаюсь получить плоский список зависимостей.

Код: Выделить всё

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)

# trying loop
for i in list_of_tasks:
if i["version"] == dep:
add_dependencies(i)
# or this list comprehencion with 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': []
}
но я ломаю голову, пытаясь понять, почему не захватывается зависимость Next, например: первый элемент должен дать

Код: Выделить всё

'1':['2', '3', '4']
Я ценю помощь, ребята =)

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»