Mit d
als Eingang durchlaufen Ihre Eingabeliste mit.
Da es zwei Elemente in jeder Teil-Listen, halten Sie die Position und ID in der Iterationsvariable als p
und id
Beispiel, Sie verarbeiten Liste ['Director - Product Manager - Project Manager - Staff', 5090],
Um den Titel jeder Position erhalten Sie Sie können die durch -
getrennte Position teilen und die führenden und nachfolgenden Leerzeichen entfernen. Z. B.
>>> d[3][0]
'Director - Product Manager - Project Manager - Staff'
>>> map(str.strip,d[3][0].split('-'))
['Director', 'Product Manager', 'Project Manager', 'Staff']
Der Ausgang dict, zusammen mit dem unmittelbar vorhergehenden Position Staff
an die rekursive Suche Methode übergeben und es holt die alle Spiele des Befundes Wert, das heißt Project Manager
und eine Liste zurückgibt. Hol das letzte Match.
>>> recursive_search([data,],'Product Manager')[-1]
{'children': [{'children': [{'id': 5090, 'title': 'Staff'}, {'id': 5087, 'title': 'Staff 2'}], 'id': 9080, 'title': 'Project Manager'}, {'id': 9099, 'title': 'Project Manager 2'}], 'id': 9894, 'title': 'Product Manager'}
Sie müssen die neue ID an die children
Schlüssel des obigen Ergebnis anhängen!
Kombination aller oben,
d=[['Director', 9010],['Director - Product Manager', 9894],['Director - Product Manager - Project Manager', 9080],['Director - Product Manager - Project Manager - Staff', 5090],['Director - Product Manager - Project Manager - Staff 2', 5087],['Director - Product Manager - Project Manager 2', 9099],]
from pprint import pprint
def recursive_search(items, key):
found = []
for item in items:
if isinstance(item, list):
found += recursive_search(item, key)
elif isinstance(item, dict):
if key in item.values():
found.append(item)
found += recursive_search(item.values(), key)
return found
data={}
for p,id in d:
desig = map(str.strip,p.split('-'))
if len(desig)>1:
res = recursive_search([data,],desig[-2])[-1]
if res:
res['children']=res.get('children',[])
res['children'].append({'id':id,'title':desig[-1]})
else:
data = {'id':id,'title':p}
pprint.pprint(data)
Ausgang:
{'children': [{'children': [{'children': [{'id': 5090, 'title': 'Staff'},
{'id': 5087,
'title': 'Staff 2'}],
'id': 9080,
'title': 'Project Manager'},
{'id': 9099, 'title': 'Project Manager 2'}],
'id': 9894,
'title': 'Product Manager'}],
'id': 9010,
'title': 'Director'}
Ref: Die recursive_search Funktion hier ist die leicht modifizierte Version des Suchens durch eine dict here erwähnt verwendet
uns zeigen, was Du hast es versucht. – FcoRodr