如何对依赖项列表进行排序

时间:2015-08-18 15:08:01

标签: python

是否有任何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"]

2 个答案:

答案 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']
相关问题