nachdem ich jetzt weiß wie ich über ein Dictionary beliebiger Tiefe scannen kann http://www.python-forum.de/viewtopic.php?f=1&t=26453, kommt hier jetzt die Anwendung.
Ich bekomme Daten in der Form von
Code: Alles auswählen
Directory = namedtuple('Dir', ['id', 'name', 'parentid'])
Das Problem ist nun, dass ich keine Annahme über die Reihenfolge der Daten machen kann. Es kann also vorkommen, dass ein Verzeichnis auftaucht, für den es noch keinen Parent gibt.
Das ganze hab ich mit random.shuffel gelöst. Ich handel mir aber mit der Lösung ein nicht-deterministisches verhalten ein: Das Programm könnte beliebig lang rumrattern.
Bisher sieht das ganze so aus:
Code: Alles auswählen
from random import shuffle
while unsorted_dirs:
shuffle(unsorted_dirs)
no_parent = unsorted_dirs.pop()
found = False
scan = iter_deep(folder_hierarchy)
for pair in scan:
dir, contents = pair
if dir.id == no_parent.parentid:
contents[no_parent] = {}
found = True
break
if not found:
# Parent not found in folder hierarchy, adding to list
unsorted_dirs.append(no_parent)
found = False
Vollständigkeits halber: iter_deep is so definiert:
Code: Alles auswählen
def iter_deep(input):
for key, value in input.iteritems():
if isinstance(value, dict):
yield key, value
for i in iter_deep(value):
yield i
else:
yield key, value
Grüße,
anogayales