Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2023 17:53:26

polin11
Зарегистрирован: 2013-05-02
Сообщения: 58
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа со словарем древовидной структуры

Есть словарь вида:

 {
	1: {'name': 'Земля', 'parent': None}, 
	2: {'name': 'Евразия': 'parent': 1},
	3: {'name': 'Китай': 'parent': 2}, 
	4: {'name': 'Пекин': 'parent': 3},
	5: {'name': 'Австралия': 'parent': 1},  
	6: {'name': 'Сидней': 'parent': 5}
}

Нужно по ключу элемента получить всех родителей, например
для ключа 4 - нужно получить элементы Китай, Евразия, Земля
для ключа 6 - нужно получить элементы Австралия, Земля


Погуглил нашел, что-то похожее с использованием treelib, хочется сделать
без сторонних библиотек, с первого взгляда задача несложная

Офлайн

#2 Апрель 25, 2023 18:45:53

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

Работа со словарем древовидной структуры

 >>> data = {
     1: {'name': 'Земля', 'parent': None},
     2: {'name': 'Евразия', 'parent': 1},
     3: {'name': 'Китай', 'parent': 2},
     4: {'name': 'Пекин', 'parent': 3},
     5: {'name': 'Австралия', 'parent': 1},
     6: {'name': 'Сидней', 'parent': 5}
}
>>> def find_parent(idx, acum=None):
         acum = acum or []
         if not idx is None:
             acum.append(idx)
             return find_parent(data[idx]["parent"], acum)
         return acum
>>> find_parent(4)
[4, 3, 2, 1]



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

Отредактировано Rodegast (Апрель 25, 2023 18:46:37)

Офлайн

#3 Апрель 26, 2023 04:23:57

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9863
Репутация: +  853  -
Профиль   Отправить e-mail  

Работа со словарем древовидной структуры

  
>>> def f(dct, index):
...     out = []
...     while index is not None:
...         index = dct[index]['parent']
...         if index is not None:
...             out.append(dct[index]['name'])
...     return out
... 
>>> data = {
...     1: {'name': 'Земля', 'parent': None},
...     2: {'name': 'Евразия', 'parent': 1},
...     3: {'name': 'Китай', 'parent': 2},
...     4: {'name': 'Пекин', 'parent': 3},
...     5: {'name': 'Австралия', 'parent': 1},
...     6: {'name': 'Сидней', 'parent': 5}
... }
>>> 
>>> f(data, 4)
['Китай', 'Евразия', 'Земля']
>>> f(data, 6)
['Австралия', 'Земля']
>>> f(data, 1)
[]
>>>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version