Найти - Пользователи
Полная версия: Построение дерева каталога на python
Начало » Python для новичков » Построение дерева каталога на python
1 2
Rodegast
> мне потребуется использовать к примеру этот класс дерева

Зачем тебе класс? Просто заполняй списки через рекурсию как я тебе показал, этого будет достаточно. Функция get_parent возвращает список дочерних элементов по этому сделать проверку leaf / expanded можно с её помощью.
Ambassador
Сделал так :

 mylist =[{'id': '1', 'name': 'Title1', 'id_parent': '0'}, {'id': '2', 'name': 'title2', 'id_parent':
 '1'}, {'id': '3', 'name': 'title3', 'id_parent': '1'}, {'id': '4', 'name': 'Title4', 'id_parent': '0'},
 {'id': '5', 'name': 'title5', 'id_parent': '4'}]
def get_parent(id_parent):
    c = []
    for x in mylist:
        if not x["id"] == id_parent and x["id_parent"] == id_parent:
            if x["id_parent"] == "0":
                x['expanded'] = True
            else:
                x['leaf'] = True
            c.append(x)
    return(c)
def get_tree(t, n=0):
    list = []
    for x in get_parent(t):
        all_stor = {}
        all_stor["text"] = x['name']
        all_stor["id"] = x['id']
        if(x.get('expanded')):
            all_stor["expanded"] = x['expanded']
        else:
            all_stor["leaf"] = x['leaf']
        get_tree(x["id"], n+1)
        list.append(all_stor)
    return(list)
        
    
main = get_tree("0")
print(main)

Но в main возвращаются только родительские значения словарей.
 [{'id_parent': '0', 'id': '1', 'expanded': True, 'name': 'Title1'}, {'id_parent': '0', 'id': '4', 'expanded': True, 'name': 'Title4'}]
Как мне получить все словари что бы их обрабатывать и заполнять списки необходимого формата?
Сразу же в функции get_tree у меня не получается строить списки.
Papa_Svin
“Дедушка Мороз, я так старалась, так тебя ждала, платьице погладила, пирог испекла и стишок выучила, а когда ты пришёл, я так обрадовалась, так побежала тебя встречать… в общем платьице я порвала, пирог уронила, а стишок забыла”
“Ну девочка, ну ёб твою мать!!!!”
(с)

Ambassador
if not x == id_parent
рукалицо.жпг


Ребят, помогите, пож-та, мне необходимо написать на python алгоритм построения дерева

И где тут дерево?
Rodegast
> Как мне получить все словари что бы их обрабатывать и заполнять списки необходимого формата?

 def get_tree(t):
    lst = []
    for x in get_parent(t):
        all_stor = {}
        all_stor["text"] = x['name']
        all_stor["id"] = x['id']
        if x.get('expanded'):
            all_stor["expanded"] = x['expanded']
        else:
            all_stor["leaf"] = x['leaf']
        lst.append([all_stor, get_tree(x["id"])])
    return lst

> рукалицо.жпг

тебе что то не нравится?
Ambassador
Rodegast - А возможно ли заполнять список форматом который мне требуется сразу же в функции get_tree, т.е all_stor сделать в виде
 [children:[{text: "Title 1", id: '1', expanded: true,children: [{text: "title2", leaf: true ,},{text: "title3", leaf: true}]},{text: "Title4", id: '4', expanded: true, children: [{text: "title5", leaf: true,} ]}]]
Ambassador
У меня получается заполнить список, статично:
 q = []
i = []
f = []
h = []
a = {}
b = {'text': "Title 1", 'id': 1, 'expanded': True}
c = {'text': "title2", 'leaf': True}
d = {'text': "title3", 'leaf': True}
e = {'text': "Title 4", 'id': '4', 'expanded': True}
g = {'text': "title5", 'leaf': True}
i.append(c)
i.append(d)
f.append(g)
b['children'] = i
e['children'] = f
h.append(b)
h.append(e)
a['children'] = h
main = [a]
print(main)

Но вот сделать аналогично, в цикле, у меня не получается.
Можете показать, как сделать это в цикле?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB