У меня есть структура, которая выглядит следующим образом:Перемещение и изменение древовидного списка структуры Dict
[ {'id': 4, 'children': None},
{'id': 2, 'children':
[ {'id': 1, 'children':
[ {'id': 6, 'children': None},
{'id': 5, 'children': None} ]
},
{'id': 7, 'children':
[ {'id': 3, 'children': None} ]
}
]
}
]
У меня также есть список выбранных идентификаторов, [4, 5, 6, 7]
. Я хочу пройти список и для каждого объекта в списке, добавить ключ selected
со значением 1
, если он выбран, и 0
, если это не так.
В настоящее время я делаю это рекурсивно с помощью этой функции:
def mark_selected(tree, selected):
for obj in tree:
obj['selected'] = 1 if obj['id'] in selected else 0
if obj['children'] is not None:
obj['children'] = mark_selected(obj['children'], selected)
return tree
Это, кажется, работает хорошо, но мне было интересно, если есть более умный способ сделать это, возможно, используя список понимание или генераторы.
Может ли кто-нибудь придумать более элегантное решение для этого?
Спасибо за совет. Я не использую логический тип, потому что он будет преобразован в JSON и взаимодействует с другим языком, который хочет «0» и «1». – 2010-12-07 00:06:47