ich eine verschachtelte dict
haben, die wie folgt aussieht:Rekursion in dict
Es gibt mehrere Verschachtelungen innerhalb des Schlüssel children
. Ich möchte den Schlüssel branch
immer dann erfassen, wenn der Schlüssel children
vorhanden ist. Da es mehrere children
gibt, möchte ich dies für jedes Kind tun. Natürlich kann jedes Kind auch weitere children
haben. Diese Verschachtelung kann bis zu 7 Ebenen umfassen.
Um dies zu erreichen, könnte ich entweder eine boneheaded 7-for-loop-Methode schreiben oder Rekursion verwenden. Also gab ich einen Schuss Rekursion und kam mit dem folgenden Code auf:
def GatherConcepts(header):
if 'children' in header.keys():
if len(header['children']) > 0:
if 'branch' in header.keys():
concepts.append(header['handle'])
if 'children' in header.keys():
for j in range(0, len(header['children'])):
GatherConcepts(header['children'][j])
else:
for i in range(0,len(header['children'])):
GatherConcepts(header['children'][i])
Das Problem mit diesem Code ist, dass es mir nur 2 Ebene gibt (weil ich die Funktion selbst 2 mal bin Aufruf, damit nicht Rekursion richtig), nicht 7.
Wie kann ich dies verbessern, um alle Ebenen zu bekommen?
Alle Zeiger würden sehr geschätzt werden.
Können Sie ein Beispiel für die Eingabe (die bereitgestellte Eingabe) und die Ausgabe, die Sie davon erwarten würden, zeigen? –
Es sieht so aus, als hätte das Top-Level-Dict 'children', aber keine' branch' (außer, dass ich diese Ausgabe falsch lese) ... – mgilson
Außerdem wird FWIW, 'key in some_dict.keys()' weniger effizient sein (signifikant auf python2.x) als 'key in some_dict'. – mgilson