Для 1 это понимание списка. Они используются для создания списка из другого списка.
Для 2, на самом деле, проблема в том, что вы не хотите, чтобы None
s добавлялись к hierarchy['children']
. Это можно сделать несколькими разными способами, но для этого я бы просто изменил вашу строку >>>
.
Если у вас Python 3.8+, вы можете использовать выражение присваивания (:=
) и добавьте проверку if
к пониманию списка:
hierarchy['children'] = [
child := path_hierarchy(os.path.join(path, contents))
for contents in os.listdir(path)
if child # Only add a child if the child is truthy (Not None)
]
Без Python 3.8 вам необходимо преобразовать этот фрагмент в полный for
l oop:
hierarchy['children'] = []
for contents in os.listdir(path):
child = path_hierarchy(os.path.join(path, contents))
if child:
hierarchy['children'].append(child)
Оба, по сути, эквивалентны.
Вывод здесь состоит в том, чтобы просто проверить, что является дочерним элементом, прежде чем добавлять его в дерево.