Python 如何对依赖项列表进行排序
是否有任何pythonic方法将无序的链接列表排序为依赖项排序列表 给定以下无序链接列表: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
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
字段是否都不同?谢谢,该解决方案也有效!谢谢,这个解决方案也很有效!谢谢,这个解决方案也很有效!谢谢,这个解决方案也很有效!