Konvertieren Baum Liste-Hierarchie dict
Habe ich eine Liste von Elementen mit attrs: übergeordnete, Ebene, is_leaf_node, is_root_node, is_child_node.
Will ich konvertieren Sie diese Liste, um die Hierarchie dict.
Beispiel der Ausgabe dict:
{
'Technology':
{
'Gadgets':{},
'Gaming':{},
'Programming':
{
'Python':{},
'PHP':{},
'Ruby':{},
'C++':{}
},
'Enterprise':{},
'Mac':{},
'Mobile':{},
'Seo':{},
'Ui':{},
'Virtual Worlds':{},
'Windows':{},
},
'News':{
'Blogging':{},
'Economics':{},
'Journalism':{},
'Politics':{},
'News':{}
},}
Ich weiß nicht, Algorithmus. Wie es zu tun?
- Ist elem.Eltern ein Verweis auf ein übergeordnetes element? Oder ist es ein string? Das wird der Unterschied zwischen dem Bau dieses dict leicht oder nicht.
- Ich habe 2 parrent attrs. Die erste ist eine "übergeordnete", die inclue-string mit parrent Namen und die zweite ist eine "parent_id" wie INT id der übergeordneten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine weniger anspruchsvolle, rekursive version wie chmod 700 beschrieben. Völlig ungetestet natürlich:
Alles ohne ein Elternteil ist Ihr top-Niveau, so stellen diese dicts ersten. Dann machen Sie einen zweiten Durchlauf durch das array, um alles zu finden mit einem Elternteil auf, dass top-level, etc... Es könnte so geschrieben werden, als eine Schleife oder eine rekursive Funktion. Sie wirklich nicht brauchen jede der zur Verfügung gestellten info neben "Eltern".
Es klingt wie das, was Sie im Grunde tun zu wollen ist eine Variante des topologische Sortierung. Der gebräuchlichste Algorithmus für diese ist die Quelle entfernen Algorithmus. Der pseudocode würde das etwa so Aussehen:
Dieser offensichtlich kaputt ist in ein paar Orte (zumindest als eigentlichen Python-code). Allerdings hoffentlich, dass wird Ihnen eine Idee geben, wie der Algorithmus funktioniert. Beachten Sie, dass diese scheitern wird schrecklich, wenn es einen Zyklus, in der Elemente, die Sie haben (sagen Element a Element b als Elternteil während Element b Element a als Elternteil). Aber das wäre dann wahrscheinlich unmöglich sein, Sie zu repräsentieren in dem format, das Sie wollen, sind zu tun sowieso.
Etwas einfaches wie das gehen könnte:
einen schönen rekursiven Art und Weise, es zu tun: