是否有任何pythonic方法将无序链接列表排序为依赖关系排序列表?
给出以下unordered_linked_list:
unordered_linked_list = [
{id: "DE3", pred: "FE8"},
{id: "FE8", pred: None},
{id: "79E", pred: "DE3"},
{id: "52D", pred: "79E"},
...
]
哪个应该导致
ordered_list = ["FE8", "DE3", "79E", "52D"]
答案 0 :(得分:2)
通常,使用topological sort对依赖项进行排序。但是,这个特定的情况很简单(每个项目只有一个传入和传出边缘),不需要完整的拓扑排序。
而不是链接列表,你有一个链接列表。所以只需将其重组为类似于链表的东西并遍历它:
# transform into a source:target dictionary
links = {d['pred'] if d['pred'] else 'root':d['id'] for d in unordered_linked_list}
# follow links and print
source = 'root'
while source in links:
print links[source]
source = links[source]
答案 1 :(得分:1)
试试这个:
unordered_linked_list = [
{'id': "DE3", 'pred': "FE8"},
{'id': "FE8", 'pred': None},
{'id': "79E", 'pred': "DE3"},
{'id': "52D", 'pred': "79E"},
]
def traverse(links):
preds = dict()
for item in links:
preds[item['pred']] = item['id']
item = None
items = []
while item in preds:
item = preds[item]
items.append(item)
return items
>>> traverse(unordered_linked_list)
['FE8', 'DE3', '79E', '52D']