我试图建立一个层次化的有向网络,其中一些节点可以分支到其他节点,而其他节点则不能。内部字典中的值(即整数)用于跟踪树型结构中的叶子。我已经创建了一个简单的方法来将这个特定的嵌套字典graph_data转换为有向图,但它只特定于3层。下面显示了层次结构:
如何创建一个嵌套函数,为任意级别的有向图添加边?例如,如果有一个level-3或level-4这就行不通了,我每次都要把它展开。我需要使用while循环吗?在import numpy as np
from collections import *
import networkx as nx
%matplotlib inline
# Hierarchical data
graph_data = {"root": {"level-0.A":0,
"level-0.B":{"level-1.B.1":2,
"level-1.B.2": {"level-2.B.2.1":3, "level-2.B.2.2":1}}}}
# Empty directed graph
G = nx.DiGraph()
# Helper functions
is_dict = lambda x: type(x) in {dict, OrderedDict, defaultdict}
# Iterate through the layers
for root, level_0 in graph_data.items():
if len(level_0) > 0:
for level_0_node, level_1 in level_0.items():
G.add_edge(root, level_0_node)
if is_dict(level_1):
for level_1_node, level_2 in level_1.items():
G.add_edge(level_0_node, level_1_node)
if is_dict(level_2):
for level_2_node, level_3 in level_2.items():
G.add_edge(level_1_node, level_2_node)
np.random.seed(8)
nx.draw(G, with_labels=True)