ich eine Struktur haben, die wie folgt aussieht:Verfahrgeschwindigkeit und Modifizieren einer baumartigen Liste der dict Struktur
[ {'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} ]
}
]
}
]
Ich habe auch eine Liste der ausgewählten IDs, [4, 5, 6, 7]
. Ich möchte die Liste durchqueren und für jedes Objekt in der Liste einen selected
Schlüssel mit einem Wert von 1
hinzufügen, wenn dieser ausgewählt ist, und 0
, wenn dies nicht der Fall ist.
Zur Zeit mache ich das rekursiv mit dieser Funktion:
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
Dies scheint gut zu funktionieren, aber ich frage mich, ob es eine kluge Art und Weise war, dies zu tun, möglicherweise Liste Verständnis oder Generatoren.
Kann jemand eine elegantere Lösung dafür finden?
Danke für den Rat. Ich verwende keinen booleschen Typ, da dieser in JSON konvertiert wird und mit einer anderen Sprache interagiert, die "0" und "1" haben will. –
Ah. Sie können es jedoch einfacher machen: 'int (obj ['id'] in selected)'. :) –