Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 28, 2018 10:50:18

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Построение дерева каталога на python

> мне потребуется использовать к примеру этот класс дерева

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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#2 Окт. 2, 2018 18:50:32

Ambassador
Зарегистрирован: 2018-09-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение дерева каталога на python

Сделал так :

 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 у меня не получается строить списки.

Офлайн

#3 Окт. 3, 2018 06:26:35

Papa_Svin
Зарегистрирован: 2018-09-17
Сообщения: 138
Репутация: +  1  -
Профиль   Отправить e-mail  

Построение дерева каталога на python

“Дедушка Мороз, я так старалась, так тебя ждала, платьице погладила, пирог испекла и стишок выучила, а когда ты пришёл, я так обрадовалась, так побежала тебя встречать… в общем платьице я порвала, пирог уронила, а стишок забыла”
“Ну девочка, ну ёб твою мать!!!!”
(с)

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


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

И где тут дерево?

Офлайн

#4 Окт. 3, 2018 11:06:04

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Построение дерева каталога на python

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

 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

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

тебе что то не нравится?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Окт. 5, 2018 14:27:54

Ambassador
Зарегистрирован: 2018-09-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение дерева каталога на python

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 (Окт. 5, 2018 14:28:36)

Офлайн

#6 Окт. 5, 2018 15:17:44

Ambassador
Зарегистрирован: 2018-09-26
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение дерева каталога на python

У меня получается заполнить список, статично:

 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)

Но вот сделать аналогично, в цикле, у меня не получается.
Можете показать, как сделать это в цикле?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version