Найти - Пользователи
Полная версия: Работа со словарем древовидной структуры
Начало » Python для новичков » Работа со словарем древовидной структуры
1
polin11
Есть словарь вида:
 {
	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, хочется сделать
без сторонних библиотек, с первого взгляда задача несложная
Rodegast
 >>> 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]
py.user.next
  
>>> 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)
[]
>>>
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