Rekursive Tiefe von python-dictionary
G ' Day,
Ich bin auf der Suche nach der rekursiven Tiefe einer Funktion, die Schleppnetze ein Wörterbuch, und ich bin ein bisschen verloren...
Derzeit habe ich so etwas wie:
myDict = {'leve1_key1': {'level2_key1': {'level3_key1': {'level4_key_1': {'level5_key1': 'level5_value1'}}}}}
Und ich möchte wissen, wie verschachtelt die verschachtelten dictionary ist... so habe ich das folgende tun...
def dict_depth(d, depth):
for i in d.keys():
if type(d[i]) is dict:
newDict = d[i]
dict_depth(newDict, depth+1)
return depth
print dict_depth(myDict, 0)
Problem ist nur, das die rekursive Schleife gibt nur die Rückkehr der Letzte Wert (0).
wenn ich in einer print-Anweisung
for i in d.keys():
dann kann ich zumindest drucken der höchste Wert der Rekursion, aber der Rückgabe Wert ist ein anderes Thema...
Ich bin sicher, dies ist einfach - ich habe nur jellybrain.
Cheers
- Sie werden nicht finden, jede Grenze die hier (außer für den verfügbaren Speicher). Jede verschachtelte Wörterbuch ist ein neues Objekt, das weiß, nichts über seine Eltern.
- Aber Ihr code möglicherweise ausgeführt wird, in einen stack-überlauf. Dies hat nichts zu tun mit irgendeiner Wörterbuch Grenzen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher sein, weisen Sie das Ergebnis der rekursiven Aufruf Tiefe. Auch, wie @amit sagt, erwägen Sie die Verwendung max, so dass Sie behandeln können dicts mit mehreren Schlüssel-Wert-Paare (einer baumartigen Struktur).
max()
auf die Tiefe, die Sie überschreiben könnendepth
mit einem kleineren Wert, wenn das Wörterbuch hat mehr dann 1 drücken.Speichern Sie den Wert retured aus dem rekursiven Aufruf und die Anzeige der max. - Wert gefunden wird, ansonsten - Sie sind dem Aufruf der rekursiven Funktion, ohne etwas zu tun mit der zurückgegebene Wert! [und 0 zurückgeben, wie erwartet, denn es wurde nie geändert]
Hier der code funktioniert einwandfrei, wenn auch die Liste ebenfalls enthalten.
Ich kann mir nicht möglich schlagen Raymond Hettinger, wenn er DIE R. H. 😉 Aber ich kam zu einer ähnlichen Lösung mit einigen print-Anweisungen, um zu veranschaulichen, was passiert!
Eine nicht-rekursive version: