Создание дерева активов из таблицы данных активов - PullRequest
0 голосов
/ 01 февраля 2019

У меня в настоящее время есть таблица данных.Каждая строка соответствует активу, причем столбцы представляют разные поля об этом активе (например, номер детали, местоположение и т. Д.). Мне интересны два столбца:

  1. Родительский актив и
  2. Тег актива.

Родительский актив содержит тег актива родительского актива.

Например, скажем, у нас есть актив A (с тегом актива) с родительским активомактив B (с тегом актива b).Для актива A столбец родительского актива будет b (тег актива B).Это означает, что актив A связан (возможно, часть аппаратного обеспечения, обработанного в B) с активом B. Однако актив A также может быть родительским активом для актива C. Следовательно, структура выглядит как B -> A -> C.Однако A также может быть родительским для D. Таким образом, структура может выглядеть как B -> A -> C, D или что-то еще более сложное.Надеюсь, это даст вам представление о деревьях, которые я хотел бы сгенерировать из моей таблицы данных.

Я не уверен, как бы я манипулировал данными в структуре данных, представляющей каждое дерево.В настоящее время у меня есть класс asset, но у меня возникают проблемы с циклическим просмотром данных и добавлением детей или родителей, поскольку неизвестно, сколько уровней родительско-дочерних отношений существует между активами.

Ядумая что-то вроде этого (с кодом, который также не предоставляется), но это не работает, потому что в конечном итоге это только пойдут родители-дети-внуки, но может быть больше уровней.

class asset:
    def __init__(self, tag, children, parent):
        self.children = children
        self.tag = tag
        self.parent = parent

#asset list is populated of assets with only one level of children
#could be more than one child, but only children - no grandchildren


final_tree = {}
for asset in asset_list:
    dummy_asset = asset
    final_tree[asset.tag] = {asset.children}
    while x != 1:
        for child in dummy_asset.children:
            if child.children != []:
                final_tree[dummy_asset.tag] = child.children
                dummy_asset = child.children
            else:
                x = 1

У кого-нибудь естьдругие идеи?

...