Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7

Наполнение списка в виде структуры дерева

04.10.2018, 10:01. Показов 4552. Ответов 13

Студворк — интернет-сервис помощи студентам
Добрый день.
Ребят, помогите начинающему в изучение python.
Пытаюсь создать данные в виде дерева:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[
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 ,
}
]
}
]
]
Исходные данные выглядят так:
Python
1
2
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}]
Прошелся рекурсией, но опыта и знаний не хватает что бы правильно заполнить список в необходимом виде :
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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):
lst = []
main_data = []
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’]
main_data.append(all_stor)#Как правильно создать необходимую структуру?
lst.append([main_data, get_tree(x[«id»])])
return lst
main = get_tree(«0»)
print(main)
Помогите, пож-та, заполнить список в необходимом формате.

Добавлено через 11 часов 5 минут
Отформатировал код.
Необходимая структура данных:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[
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 ,
    }    
    ]
 }
 ]
 ]
Исходные данные:
Python
1
2
3
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'}]

Рекурсию которую написал:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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):
    lst = []
    main_data = []
    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']
           
        main_data.append(all_stor)#Как наполнить список необходимой структурой
        lst.append([main_data, get_tree(x["id"])])
    return lst
main = get_tree("0")
print(main)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2018, 10:01
Ответы с готовыми решениями:

Выдать на экран в текстовом режиме элементы дерева списка в виде дерева, повернутого против часовой стрелки
Помогите пожалуйста написать программу Выдать на экран в текстовом режиме элементы дерева списка в виде дерева, повернутого против...

Для каждого бинарного дерева выполнить преобразование дерева в список, результат вывести в виде списка списков
Объясните почему не работает, задание было таким " Дан список, элементы которого — непустые бинарные деревья с числами в качестве...

Представление структуры папков в фс в виде дерева
Надо какая-то "ходилка" по папкам с древовидной структурой. Ну вот как в обычных файловых менеджерах: чтобы слева деревцо, а справа окно с...

13
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
04.10.2018, 13:14
То есть на вход подаётся список и надо создать дерево?
Если id соответствует позиции в списке, тогда и делать-то особо ничего не надо. Если нет - то можно пройтись, создать нормально упорядоченый список и задача сведётся к уже решённой
0
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7
04.10.2018, 15:29  [ТС]
Нет, id может не соответствовать порядку. Вопрос заключается в том, как заполнить результирующий список в необходимом формате
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
04.10.2018, 17:30
Это же просто. Создаёте список из None длины L, где L - максимальный id. Пробегаете по входному списку, присваиваете элементу из нового списка нужный итем.
Разумеется, это пойдёт, если ваши id не очень большие.
Вообще советую посмотреть, как делается дерево в простом случае, не из некоторого входного списка.
0
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7
05.10.2018, 10:44  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Вообще советую посмотреть, как делается дерево в простом случае, не из некоторого входного списка.
Дайте, пож-та, ссылки на примеры
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.10.2018, 12:04
Пожалуйста http://lmgtfy.com/?q=tree+data+structure+in+python .
Если вкратце - класс ветка, две ссылки на детей. Всё.
0
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7
05.10.2018, 13:27  [ТС]
В примерах, как правило создаются деревья при помощи классов, у меня то попроще, я рекурсией прохожусь и по сути все что мне надо это наполнить список нужной структурой. Вот это у меня и не получается
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.10.2018, 13:33
Ambas, да, обычно делается с помощью классов - именно потому, что это в итоге оказывается проще.
Можете и без классов, тогда это будет куча https://ru.wikipedia.org/wiki/... 1%8B%D1%85) . Возможно, в вашем случае это будет проще.

Добавлено через 51 секунду
Обратите внимание на строчку:
Кучи обычно реализуются в виде массивов, что исключает наличие указателей между её элементами.
0
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7
05.10.2018, 15:18  [ТС]
dondublon - Да, по всей видимости мне и нужна куча. Поэтому мой вопрос и заключается как правильно наполнить список all_stor что бы получить необходимую структуру?

Добавлено через 13 минут
У меня получается заполнить список, статично:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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)
Но вот сделать аналогично, в цикле, у меня не получается.
Можете показать, как сделать это в цикле?
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.10.2018, 15:28
Я же написал:
Цитата Сообщение от dondublon Посмотреть сообщение
Создаёте список из None длины L, где L - максимальный id. Пробегаете по входному списку, присваиваете элементу из нового списка нужный итем.
У вас, кстати, id не у всех элементов - почему?
0
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7
05.10.2018, 16:34  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
У вас, кстати, id не у всех элементов - почему?
Они просто не нужны в дочерних поэтому я их и не указываю, но могу и заносить их в child
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.10.2018, 16:40
Цитата Сообщение от Ambas Посмотреть сообщение
Они просто не нужны в дочерних
А как же вы определяете, кто у кого родитель и дочка?
0
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7
05.10.2018, 17:25  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
А как же вы определяете, кто у кого родитель и дочка?
В исходном списке у каждого вложенного словаря есть id и id_parent
Каждый id имеет отношение к id_parent, те id_parent у которых значение 0, являются родителями первого уровня.
При создании темы я указывал исходный список:

Python
1
2
3
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'}]
Цитата Сообщение от dondublon Посмотреть сообщение
Они просто не нужны в дочерних
Это для результирующего списка id не требуются
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
05.10.2018, 17:46
Ambas, понятно. Ну, для контроля-то их лучше бы оставить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.10.2018, 17:46
Помогаю со студенческими работами здесь

Представление дерева в виде списка
Здравствуйте. Так и не могу понять, каким образом представляются деревья в виде списков! Можно пример?

Корректировка запросов при организации структуры изделия в виде дерева TreeView
Доброго времени суток форумчане! Есть проблема, просьба помочь ее решить! В таблице «tblCpravochnik» находится номенклатура ...

Вывод из Excel многоуровневого списка в виде дерева
Здравствуйте! (я полный ноль) Каким образом можно реализовать вывод списка(прайс) многоуровневый в виде дерева с выводом данных из...

Формирование списка товаров склада в виде бинарного дерева
Помогите пожалуйста.. решить вот эту задачку( Информация о товарах на складе организована как бинарное дерево. Каждая запись...

Хранение и отображения списка папок в виде дерева (Иерархическая структура)
Здравствуйте. Уже создавал тему: https://www.cyberforum.ru/windows-forms/thread2495681.html Но видимо неправильно назвал или что....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru