2016-07-13 5 views
0

ネストされた辞書に変換したいリストがあります。リストの最初の要素は親で、2番目の要素は子です。各レベルのヘルパーリストを作成しなくても、これを再帰的に行うことはできますか?私はこれを理解していないので、とても愚かな気がする。親と子のネストされた辞書へのリスト

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

を期待される出力とは何でしょうか? –

答えて

2

だけで、対応する辞書に名前をマップする辞書を作成します。

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 

これが生成します。

>>> 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

ありがとうございました!私はあなたの例で遊んで、最終的にそれを得ました。 – curiousaboutpi

関連する問題