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

Python 如何对依赖项列表进行排序,python,Python,是否有任何pythonic方法将无序的链接列表排序为依赖项排序列表 给定以下无序链接列表: unordered_linked_list = [ {id: "DE3", pred: "FE8"}, {id: "FE8", pred: None}, {id: "79E", pred: "DE3"}, {id: "52D", pred: "79E"}, ... ] 这将导致 ordered_list = ["FE8", "DE3", "79E", "52

是否有任何pythonic方法将无序的链接列表排序为依赖项排序列表

给定以下无序链接列表:

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"]

通常,排序依赖项是使用完成的。但是,这个特定的情况非常简单(每个项目只有一个传入和传出边缘),因此不需要进行完整的拓扑排序

您拥有的不是链接列表,而是链接列表。因此,只需将其重组为类似于链表的内容并遍历它:

# 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]

通常,排序依赖项是使用完成的。但是,这个特定的情况非常简单(每个项目只有一个传入和传出边缘),因此不需要进行完整的拓扑排序

您拥有的不是链接列表,而是链接列表。因此,只需将其重组为类似于链表的内容并遍历它:

# 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]

通常,排序依赖项是使用完成的。但是,这个特定的情况非常简单(每个项目只有一个传入和传出边缘),因此不需要进行完整的拓扑排序

您拥有的不是链接列表,而是链接列表。因此,只需将其重组为类似于链表的内容并遍历它:

# 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]

通常,排序依赖项是使用完成的。但是,这个特定的情况非常简单(每个项目只有一个传入和传出边缘),因此不需要进行完整的拓扑排序

您拥有的不是链接列表,而是链接列表。因此,只需将其重组为类似于链表的内容并遍历它:

# 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]
试试这个:

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']
试试这个:

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']
试试这个:

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']
试试这个:

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']


4是从哪里来的?你想要像
这样的排序([d['id']表示无序链接列表中的d])
(这将是
[0,1,2,3]
)?这是一个什么样的链接列表?确实是一个坏例子。id应该是字符串。我更新了问题
pred
字段是否都是不同的?4从何而来?是否希望
排序([d['id']表示无序链接列表中的d])
(这将是
[0,1,2,3]
)?这是一个什么样的链接列表?确实是一个糟糕的例子。id应该是字符串。我更新了问题
pred
字段是否都是不同的?4从何而来?是否希望
排序([d['id']表示无序链接列表中的d])
(这将是
[0,1,2,3]
)?这是一个什么样的链接列表?确实是一个糟糕的例子。id应该是字符串。我更新了问题
pred
字段是否都是不同的?4从何而来?是否希望
排序([d['id']表示无序链接列表中的d])
(这将是
[0,1,2,3]
)?这是一个什么样的链接列表?确实是一个糟糕的例子。id应该是字符串。我更新了问题
pred
字段是否都不同?谢谢,该解决方案也有效!谢谢,这个解决方案也很有效!谢谢,这个解决方案也很有效!谢谢,这个解决方案也很有效!