2017-08-16 3 views
0

Je suis en train de convertir dict pour une vue actuelle au format « illimité » que je peux l'utiliser dans AngularJS objet:Convertir Dict à dict avec les enfants et la profondeur

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': {}}}}}}}}}" 

au format avec les noms et les valeurs des enfants, comme:

[{ 
    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"}] 
}] 

J'ai essayé quelques approches différentes, mais j'ai toujours reçu des résultats partiels. Par exemple, j'ai essayé d'utiliser la récursivité, il est allé jusqu'à la valeur de la profondeur et ensuite ignoré tous les autres arbres.

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

Par conséquent, je n'ai reçu qu'une partie de mon dict back. Je compris que ma boucle n'a jamais travaillé parce que je retourne valeur avant la prochaine itération, mais ne savez pas comment résoudre ce problème:

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

Quelle est la question? Pouvez-vous éclaircir la question un peu? Merci! @CblpHuK – Agustin

Répondre

1

Vous devez ajouter ces valeurs individuelles que vous êtes en train de revenir à une liste, puis revenir que liste. Ou, en utilisant une compréhension de liste:

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

merci beaucoup, ça marche. J'étais fermé :) – CbIpHuK