Решения для динамической бесконечной древовидной структуры в Python - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь построить древовидную структуру, начиная с точки 1, которая может переходить в бесконечные направления. Каждая точка может пройти в бесконечные другие точки (1.1, 1.2, 1.3, ...), и каждая из этих точек также может пройти в бесконечные точки (1.1.1, 1.2.1, 1.2.2, ...).

Мой план состоял в том, чтобы хранить Объект в каждой точке и иметь возможность ссылаться на них с помощью позиции 1.1.1 и т. Д. Также я решил генерировать каждую точку динамически, поэтому Дерево начинается с 1 и разветвляется только тогда, когда Объект

Поскольку я склонен слишком усложнять вещи, я использовал вложенный словарь, поэтому я мог ссылаться на объект с помощью dict [1] [1] ["data"], но я борюсь сиспользование бесконечного вложенного словаря:

Как использовать словарь, если количество «[1]» варьируется? (думаю, dict[1][1][1]....[1]["data"]).

Я могу просто просмотреть цикл, чтобы найти данные, например

for i in [1.1.1]:
    point = dict[i]

Но я не могу найти способ открыть новые словарные ветви илихранить данные, когда количество «[1]» неизвестно.

По сути, я хочу знать, существует ли более простое решение и как обращаться со слишком многими вложенными скобками «[]».

1 Ответ

0 голосов
/ 21 октября 2019

Возможно, вам понадобится другой способ получения значений, чем использование [], поскольку, как вы сказали, это трудно сделать, когда вы не знаете, насколько глубоко что-то.

Вместо этого вы можете использовать простой рекурсиви используйте список для своего ключа вместо строки:

def fetch_field(subtree, key_list):
    if not key_list:
        return subtree["data"]

    return fetch_field(subtree[key_list[0]], key_list[1:])

key = "1.2.1.3"
# Instead of using a string, split it into a list:
key = key.split(".")
fetch_field(tree, key)

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

...