В NetworkX, как получить дерево DFS, включая данные узла? - PullRequest
0 голосов
/ 01 октября 2018

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

Однако я заметил, что функция nx.dfs_tree, похоже, возвращает дерево без каких-либо данных:

In [1]: import networkx as nx

In [2]: G = nx.DiGraph()

In [3]: G.add_nodes_from([(0, {'name': 'foo'}), (1, {'name': 'bar'}), (2, {'name
   ...: ': 'baz'})])

In [4]: G.add_edge(0, 1)

In [5]: G.add_edge(1, 2)

In [6]: T = nx.dfs_tree(G, 1)

In [7]: T.nodes[1]
Out[7]: {}

In [8]: T.nodes[2]
Out[8]: {}

In [9]: T.nodes
Out[9]: NodeView((1, 2))

In [10]: G.nodes[1]
Out[10]: {'name': 'bar'}

Как видноиз приведенного выше примера T.nodes[1] является пустым словарем, тогда как G.nodes[1] содержит словарь данных, первоначально переданный в.

Как я могу сделать так, чтобы T.nodes[1] и другие узлы дерева содержали те же данные, что иисходный график?

1 Ответ

0 голосов
/ 01 октября 2018

Я закончил копирование данных из G в T, используя метод add_nodes_from, который обновляет существующие атрибуты:

In [31]: T.add_nodes_from((i, G.nodes[i]) for i in T.nodes)

In [32]: T.nodes[1]
Out[32]: {'name': 'bar'}

Любые более элегантные решениявысоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...