>>> def f(dct, acc):
... kid = str(dct['id'])
... kparent = str(dct['parent'])
... acc.append([kid, kparent])
... for i in dct['children']:
... acc = f(i, acc)
... return acc
...
>>> dct = {
... 'id': 1,
... 'parent': 0,
... 'children': [
... {
... 'id': 3,
... 'parent': 1,
... 'children': [
... {
... 'id': 6,
... 'parent': 3,
... 'children': []
... }
... ]
... },
... {
... 'id': 4,
... 'parent': 1,
... 'children': []
... },
... {
... 'id': 5,
... 'parent': 1,
... 'children': []
... }
... ]
... }
>>>
>>> out = f(dct, [])
>>> out
[['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1']]
>>>
>>> out1 = f(dct, [])
>>> out1
[['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1']]
>>>
>>> out2 = f(dct, [])
>>> out2
[['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1']]
>>>
Для добавки id и parent в начале делаешь вторую функцию, которая вставляет id и parent, а потом использует рекурсивную функцию для собирания пар.
И сделать
def f(dct, acc=[]):
...
out = f(dct)
будет неправильно, так как в питоне этот объект будет висеть после вызова функции и следующий вызов этой же функции будет использовать уже заполненный список.
Вот что получается, если так сделать
>>> def f(dct, acc=[]):
... kid = str(dct['id'])
... kparent = str(dct['parent'])
... acc.append([kid, kparent])
... for i in dct['children']:
... acc = f(i, acc)
... return acc
...
>>> dct = {
... 'id': 1,
... 'parent': 0,
... 'children': [
... {
... 'id': 3,
... 'parent': 1,
... 'children': [
... {
... 'id': 6,
... 'parent': 3,
... 'children': []
... }
... ]
... },
... {
... 'id': 4,
... 'parent': 1,
... 'children': []
... },
... {
... 'id': 5,
... 'parent': 1,
... 'children': []
... }
... ]
... }
>>>
>>> out = f(dct)
>>> out
[['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1']]
>>>
>>> out1 = f(dct)
>>> out1
[['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1'], ['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1']]
>>>
>>> out2 = f(dct)
>>> out2
[['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1'], ['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1'], ['1', '0'], ['3', '1'], ['6', '3'], ['4', '1'], ['5', '1']]
>>>