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

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

04.10.2018, 10:01. Показов 4498. Ответов 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
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
04.10.2018, 13:14
То есть на вход подаётся список и надо создать дерево?
Если id соответствует позиции в списке, тогда и делать-то особо ничего не надо. Если нет - то можно пройтись, создать нормально упорядоченый список и задача сведётся к уже решённой
0
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 7
04.10.2018, 15:29  [ТС]
Нет, id может не соответствовать порядку. Вопрос заключается в том, как заполнить результирующий список в необходимом формате
0
Эксперт Python
 Аватар для dondublon
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru