2016-11-01 53 views
0

我無法將標識存儲到鍵,例如子(父 - 子)類的東西。我花了幾個小時,並無法想出一個辦法來實現這一點。我期待的結果是在這篇文章的末尾。任何幫助都會很棒。組合條目一起循環的詞典

import sys 
import collections 

dict = collections.OrderedDict() 
dict["A.1"] = {"parent_child":0} 
dict["A.1.1"] = {"parent_child":1} 
dict["A.1.1.1"] = {"parent_child":2} 
dict["A.1.1.2"] = {"parent_child":2} 
dict["A.1.1.3"] = {"parent_child":2} 
dict["A.1.2"] = {"parent_child":1} 
dict["A.1.2.1"] = {"parent_child":2} 
dict["A.1.2.2"] = {"parent_child":2} 
dict["A.1.2.2.1"] = {"parent_child":3} 
dict["A.1.2.2.2"] = {"parent_child":3} 
dict["A.1.2.3"] = {"parent_child":2} 
dict["A.1.3"] = {"parent_child":1} 
dict["A.1.4"] = {"parent_child":1} 


print(dict) 

new_dict = {} 

p = 0 # previous index 
i = 0 # current 
n = 1 # next index 

current_PC = 0 # current parent_child 
next_PC = 0 # next parent_child 

previous_id = "" 
current_id = "" 
next_id = "" 

change_current = True 
change = True 

lst = [] 

while(True): 
    if change_current: 
     current_id = dict.keys()[i] 
     current_PC = dict.values()[i]["parent_child"] 
     change_current = False 

    try: 
     next_id = dict.keys()[n] 
     next_PC = dict.values()[n]["parent_child"] 
    except: 
     pass # it will go out of index 

    print("KEY {0}".format(current_id)) 

    if next_PC > current_PC: 
     if next_PC - current_PC == 1: 
      lst.append(next_PC) 
      next_PC += 1 
      print("next_PC: {0}".format(next_PC)) 

    if next_PC == current_PC: 
     new_dict[current_id] = lst 
     lst = [] 
     break 

print(new_dict) 

試圖讓輸出看起來像這樣(在類似的方式),將new_dict應該是這樣的:

new_dict["A.1"] = ["A.1.1", "A.1.2", "A.1.3", "A.1.4"] 
new_dict["A.1.1"] = ["A.1.1.1", "A.1.1.2", "A.1.1.3"] 
new_dict["A.1.1.1"] = [] 
new_dict["A.1.1.2"] = [] 
new_dict["A.1.1.3"] = [] 
new_dict["A.1.2"] = ["A.1.2.1", "A.1.2.2", "A.1.2.3"] 
new_dict["A.1.2.1"] = [] 
new_dict["A.1.2.2"] = ["A.1.2.2.1", "A.1.2.2.2"] 
new_dict["A.1.2.2.1"] = [] 
new_dict["A.1.2.2.2"] = [] 
new_dict["A.1.2.3"] = [] 
new_dict["A.1.3"] = [] 
new_dict["A.1.4"] = [] 

回答

1

這給你輸出你所要求的。由於我沒有看到你想要的輸出{"parent_child":...}我沒有繼續其他任何事情。

options = ["A.1","A.1.1","A.1.1.1","A.1.1.2","A.1.1.3","A.1.2","A.1.2.1","A.1.2.2","A.1.2.2.1","A.1.2.2.2","A.1.2.3","A.1.3","A.1.4"] 


new_dict = {} 

for i, key in enumerate(options): 
     new_dict[key] = [] 
     ls = [] 
     for j, opt in enumerate(options): 
      if (key in opt) and (len(opt)-len(key)==2): 
       new_dict[key].append(opt) 
    print(new_dict) 

編輯

使用@Ranbir Aulakh

options = ["A.1","A.1.1","A.1.1.1","A.1.1.2","A.1.1.3","A.1.2","A.1.2.1","A.1.2.2","A.1.2.2.1","A.1.2.2.2","A.1.2.3","A.1.3","A.1.4"] 


new_dict = {} 

for i, key in enumerate(options): 
     new_dict[key] = [] 
     ls = [] 
     for j, opt in enumerate(options): 
      if (key in opt) and (len(opt.split("."))-len(key.split("."))==1):#(len(opt)-len(key)==2): 
       new_dict[key].append(opt) 
    print(new_dict) 
+1

的評論他有什麼,如果'A.1.10'?它不會放在'A.1'下面。可能要將'len(opt)-len(key)== 2'更改爲'len(opt.split(「。」)) - len(key.split(「。」))== 1'。這應該能夠解決這個問題。 –