2017-08-16 22 views
0

我想轉換爲字典當前視圖來,我可以在AngularJS使用它的格式與dict對象:轉換快譯通兒童和「無限」深度

data = "{'root': {'host': {'hostname1': {'10.0.0.1': {}}, 'hostname2': {'10.0.0.2': {}}}, 'monitor': {'bandwidth': {'hostname1': {'10.0.0.1': {'hostname1': {'10.0.0.1': {'10': {}}}, 'hostname2': {'10.0.0.2': {'10': {}}}}}, 'hostname2': {'10.0.0.2': {'hostname1': {'10.0.0.1': {'10': {}}}, 'hostname2': {'10.0.0.2': {'10': {}}}}}}}}}" 

姓名和孩子的值設置格式,像:

[{ 
    name: "Node 1", 
    children: [{ 
     name: "Node 1.1", 
     children:[{name:"Node 1.1.1"},{name: "Node 1.1.2"}] 
    }]},{ 
    name: "Node 2", 
    children: [{name: "Node 2.1"},{name: "Node 2.2"}] 
}] 

我嘗試了幾種不同的方法,但總是收到部分結果。例如,我嘗試使用遞歸,直到深度值,然後忽略所有其他樹。

def modifydict2(data): 
for key, value in data.items(): 
    return [{'name': key, 'children':modifydict2(value)}] 

因此,我只收到了我的部分字典。我明白,我的循環從來沒有工作,因爲我下一次迭代之前返回的值,但不知道如何解決這個問題:

[{'name': 'root', 'children': [{'name': 'host', 'children': [{'name': 'ctest1.prod01.weave.local', 'children': [{'name': '10.32.62.1', 'children': None}]}]}]}] 
+0

什麼問題?你能澄清一下這個問題嗎?謝謝! @CblpHuK – Agustin

回答

1

您需要添加過你現在正在返回到列表中的那些個體值,然後返回名單。或者,使用列表理解:

def modify_dict(d): 
    return [{'name': key, 'children': modify_dict(value)} 
      for key, value in d.items()] 
+0

非常感謝,它的工作。我很接近 :) – CbIpHuK