我正在尝试将嵌套字典显示为树。
data = {"L1" :
{"sub L1" :
"sub sub L1"},
"L2" :
"sub L2",
"L3" :
{"sub L3" :
{"sub sub L3" :
"sub sub sub L3"}}}
正如您所看到的,它都是文本数据,并且它们之间没有真正的相关性。
我尝试过networkx和树状图,但它们似乎打破了,因为我有一个嵌套字典。
有更好的方法吗?
您需要将数据解包到一系列节点链中。 然后您可以将它们按顺序添加到图表中。
data = {'L1': {'sub L1': 'sub sub L1'},
'L2': 'sub L2',
'L3': {'sub L3': {'sub sub L3': 'sub sub sub L3'}}}
def unpack(d, is_root=True):
if is_root:
root = []
r = []
for k, v in d.items():
if is_root:
r = []
root.append(r)
r.append(k)
if isinstance(v, dict):
r.extend(unpack(v, False))
else:
r.append(v)
return root if is_root else r
node_lists = unpack(data)
node_lists
# returns:
[['L1', 'sub L1', 'sub sub L1'],
['L2', 'sub L2'],
['L3', 'sub L3', 'sub sub L3', 'sub sub sub L3']]
用于绘图:
g = networkx.DiGraph()
for node_chain in node_lists:
for a, b in zip(['root'] + node_chain, node_chain):
g.add_edge(a, b)
pos = networkx.nx_pydot.graphviz_layout(g)
networkx.draw_networkx(g, pos)
networkx.draw_networkx_labels(g, pos)