如果你要做很多圖表操作,我會考慮導入networkx
,因爲它會讓事情變得更簡單。爲了解析您的嵌套列表爲networkx
樹:
import networkx as nx
def parse_tree(node_list):
"""Parses a nested list into a networkx tree."""
tree = nx.DiGraph()
root = node_list[0]
tree.add_node(root)
queue = [(root, node_list[1])]
while queue:
parent, nodes = queue.pop(0)
prev = None
for node in nodes:
if isinstance(node, list):
queue.append((prev, node))
else:
tree.add_node(node)
tree.add_edge(parent, node)
prev = node
return tree
有了這個功能,就可以輕鬆獲取每個節點的後代的字典:
>>> l = ["a", ["b", "c",["d","e"]]]
>>> tree = parse_tree(l)
>>> {node: nx.descendants(tree, node) for node in tree}
{'a': {'b', 'c', 'd', 'e'},
'b': set(),
'c': {'d', 'e'},
'd': set(),
'e': set()}
來源
2014-12-11 03:39:15
jme
上的重複鍵會發生什麼,比如'[一,[b,a,[d,e]]]?結果是什麼樣的?嘗試使用樹的現有實現並使用它。 – 2014-12-11 01:01:02
@ReutSharabani謝謝Reut。所有元素都是不同的。 – ChuNan 2014-12-11 01:18:42