2016-08-03 14 views
0

Ich habe folgende Daten von einem minimalen Spanning-Tree-Algorithmus erstellt:erstellen JSON Baum mit unbekannter Wurzel

links = [("Earl","Bob"),("Bob","Sam"),("Bob","Leroy"),("Leroy","Harry")] 

Ich brauche die Daten in den folgenden json Baum zu konvertieren:

{ 
    "id": "Earl", 
    "name": "Earl", 
    "children": [ 
     { 
      "id": "Bob", 
      "name": "Bob", 
      "children": [ 
       { 
        "id": "Leroy", 
        "name": "Leroy", 
        "children": [ 
         { 
          "id": "Harry", 
          "name": "Harry" 
         } 
        ] 
       }, 
       { 
        "id": "Sam", 
        "name": "Sam" 
       } 
      ] 
     } 
    ] 
} 

Ich habe das folgende Skript, das funktioniert, außer dass es einen Stammknoten mit dem Namen 'Root' zum Baum hinzufügt, den ich nicht möchte:

Was ich brauche, ist nicht eine gefälschte 'Root' als Wurzelknoten hinzuzufügen. Die Wurzel sollte einfach ein beliebiger existierender Knoten in links sein, der kein Elternteil hat (gemäß dem ersten json-Beispiel). Mit anderen Worten, die Wurzel des Baums muss nicht unbedingt Earl sein, es kann jeder der Knoten sein, die keine Eltern haben. Der Baum kann dann von dort aus expandieren.

Vielleicht gibt es einen besseren Algorithmus, um dies zu tun, anstatt zu versuchen, dies zu ändern?

Antwort

-1
tree = get_nodes('Root'); 
tree = tree.children[0]; 
print(json.dumps(tree, indent=2)); 
+0

tree = tree.children [0] Ergebnisse in: AttributeError: 'dict' Objekt hat kein Attribut 'children' – darkpool

+0

ja Entschuldigung, habe die Python-Syntax etwas vergessen. 'tree = tree.get (" Kinder ") [0]' – exec

-1

Ist dies nicht, weil Sie Earl als Kind Root hinzugefügt haben? Mit:

links.append(('Root', node)) 
print links # [('Earl', 'Bob'), ('Bob', 'Sam'), ('Bob', 'Leroy'), ('Leroy', 'Harry'), ('Root', 'Earl')] 

So, jetzt, wenn Sie children = get_children(node) für node = 'Root' ausführen, werden Sie True bekommen.

+0

Ja, das ist das Problem. Ich weiß jedoch nicht, wie ich das machen soll, so dass es keinen "Root" als Wurzelknoten gibt. Die Wurzel muss jeder Knoten sein, der kein Elternteil hat. Ich habe Earl nur als Beispiel benutzt. irgendwelche Vorschläge, wie man das macht? – darkpool

+0

Können Sie den Inhalt des untergeordneten Knotens abrufen? So etwas wie 'print (json.dumps (tree ['children'], indent = 2))'? – Frangipanes

Verwandte Themen