2016-07-13 14 views
0

Ich habe eine Liste, die ich in ein verschachteltes Wörterbuch umwandeln möchte. Das erste Element der Liste ist das übergeordnete Element, das zweite Element das untergeordnete Element. Kann ich das rekursiv tun, ohne weiterhin Hilfslisten für jede Ebene erstellen zu müssen? Ich fühle mich so dumm, dies nicht zu verstehen.Liste der übergeordneten und untergeordneten Elemente in verschachtelte Wörterbücher

relations = [["basket", "money"], 
      ["basket", "fruits"], 
      ["fruits", "orange"], 
      ["fruits", "apple"], 
      ["basket", "vegetables"], 
      ["vegetables", "bean"], 
      ["vegetables", "tomato"], 
      ["tomato", "red tomato"], 
      ["tomato", "green tomato"], 
      ["vegetables", "pepper"], 
      ["sweets", "candy"]] 


result = {} 
running_list = [] 

for parent, child in relations: 
    if parent == "basket": 
     result[child] = {} 
     running_list.append(child) 

for parent, child in relations: 
    if parent in running_list: 
     result[parent] = {child : {}} 

print result 
+0

Was wäre die erwartete Ausgabe sein? –

Antwort

2

Erstellen Sie einfach ein Wörterbuch, das einen Namen in das entsprechende Wörterbuch Karten:

items = {} 
for parent, child in relations: 
    parent_dict = items.setdefault(parent, {}) 
    child_dict = items.setdefault(child, {}) 
    if child not in parent_dict: 
     parent_dict[child] = child_dict 

result = items['basket'] # basket is the top-level item 

Dies erzeugt:

>>> items = {} 
>>> for parent, child in relations: 
...  parent_dict = items.setdefault(parent, {}) 
...  child_dict = items.setdefault(child, {}) 
...  if child not in parent_dict: 
...   parent_dict[child] = child_dict 
... 
>>> items['basket'] 
{'money': {}, 'vegetables': {'tomato': {'green tomato': {}, 'red tomato': {}}, 'bean': {}, 'pepper': {}}, 'fruits': {'orange': {}, 'apple': {}}} 
>>> from pprint import pprint 
>>> pprint(items['basket']) 
{'fruits': {'apple': {}, 'orange': {}}, 
'money': {}, 
'vegetables': {'bean': {}, 
       'pepper': {}, 
       'tomato': {'green tomato': {}, 'red tomato': {}}}} 
+0

Vielen Dank! Ich spielte mit deinem Beispiel herum und bekam es schließlich. – curiousaboutpi

Verwandte Themen