Как вы можете создать словари сопоставления ключей со списками, где каждый элемент в списках указывает на другие списки в Python? - PullRequest
0 голосов
/ 13 декабря 2018

Например:

d = dict()

#Map "Parent" to a list of "children" values
d["Parent"] = []
d["Parent"].append("Child1")
d["Parent"].append("Child2")
d["Parent"].append("Child3")

#I know the following is wrong, but I want each list that "Parent" maps to, also to map to a list- how would I do this?
d["Parent"]["Child3"] = []
d["Parent"]["Child3"].append("GrandChild1")

В основном это будет выглядеть как дерево (не двоичное), где есть родительский элемент верхнего уровня, указывающий на его дочерние элементы (может быть больше 2), и каждый можетуказать на его несколько детей.Есть ли другие способы сделать это?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Заинтересовавшись, как создавать деревья в python, я искал вокруг и наткнулся на пример кода на GitHub для Однострочного дерева в Python .

Создание дерева изdefaultdict:

from collections import defaultdict
def tree(): return defaultdict(tree)

Создайте свою древовидную структуру:

t = tree()
t['San Francisco Bay Area']['San Francisco']
t['San Francisco Bay Area']['South Bay']['San Jose']
t['New York']['Manhattan']

и распечатайте ее;

import json
print(json.dumps(t))

{"Нью-Йорк":{"Манхэттен": {}}, "Район залива Сан-Франциско": {"Сан-Франциско": {}, "Южный залив": {"Сан-Хосе": {}}}}

Есть дополнительная информация об итерации и, в комментариях, более полезный код и предложения по загрузке его из json и красивой печати структуры.

0 голосов
/ 13 декабря 2018

Я думаю, вы пытаетесь сделать что-то вроде этого:

d = {}

d["Parent"] = {}

d["Parent"]["Child1"] = {}
d["Parent"]["Child2"] = {}
d["Parent"]["Child3"] = {}

d["Parent"]["Child3"]["GrandChild1"] = {}
d["Parent"]["Child3"]["GrandChild2"] = {}

Однако, куда вы идете с этим?Возможно, это не лучший способ сделать это с Python.:-) Если вы можете заставить ваш текущий код работать, вы можете опубликовать его на https://codereview.stackexchange.com/ впоследствии.Вы получите ценные отзывы о том, как улучшить ваш код.


Кстати, вы можете посмотреть на «ветви» «дерева» с помощью dict.keys:

print(d.keys())
print(d["Parent"].keys())
print(d["Parent"]["Child3"].keys())

Какие отпечатки

dict_keys(['Parent'])
dict_keys(['Child3', 'Child2', 'Child1'])
dict_keys(['GrandChild2', 'GrandChild1'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...