def tree_walk(root, key, parent=None):
# перебираю все элементы массива по индексу
for index in range(0, len(root)):
# Установим родителя
root[index]['parent'] = parent
# для удобства чтения, сразу получаю элемент массива.
item = root[index]
# если в элементе массива есть ключ, который означает вложенный массив
if key in item:
# то, рекурсивно проваливаюсь во вложенный массив
tree_walk(item[key], key, item['id'])
arr = [{u'id': 1}, {u'id': 2, u'children': [{u'id': 3}, {u'id': 4}]}, {u'id': 5, u'children': [{u'id': 6}, {u'id': 7}, {u'id': 8}, {u'id': 9}]},]
def tree_walk(root, key):
# перебираю все элементы массива по индексу
for index in range(0, len(root)):
# здесь выполняется действие для каждого элемента массива:
# например, сконвертируем id из int в str
root[index]['id'] = str(root[index]['id'])
# добавим новый атрибут
root[index]['new_attr'] = 777
# для удобства чтения, сразу получаю элемент массива.
item = root[index]
# если в элементе массива есть ключ, который означает вложенный массив
if key in item:
# то, рекурсивно проваливаюсь во вложенный массив
tree_walk(item[key], key)
if __name__ == '__main__':
print(arr)
tree_walk(arr, 'children')
print(arr)