Я сделал функцию, которая выравнивает объект словаря в python. Пример такого объекта:
x = {'items': [{'name': 'Contract',
'subItems': [{'name': 'Consultant'}, {'name': 'Direct'}]},
{'name': 'Permanent',
'subItems': [{'name': 'Full Time'}, {'name': 'Part Time'}]}]}
Функция, которую я сейчас использую, использует отдельный список. Вот функция:
final_list = []
def traverseGraph(g_list, level=[]):
for g_ in g_list:
if 'subItems' in g_:
traverseGraph(g_['subItems'], level+[g_['name']])
else:
final_list.append(level+[g_['name']])
, которая дает следующий правильный вывод:
traverseGraph(x['items'])
final_list
[['Contract', 'Consultant'],
['Contract', 'Direct'],
['Permanent', 'Full Time'],
['Permanent', 'Part Time']]
Я хочу преобразовать эту функцию в хвостовую рекурсивную функцию, которая не использует отдельный список. Вот что у меня есть, но это не работает.
def traverseGraph(g_list, level=[]):
for g_ in g_list:
if 'subItems' not in g_:
return (level + [g_['name']])
return traverseGraph(g_['subItems'], level + [g_['name']])
Вот вывод:
a = traverseGraph(x['items'])
print(a)
['Contract', 'Consultant']
Я мог бы использовать список, но я бы предпочел не использовать. На данный момент это просто больше ради обучения. Спасибо!