根据字典中的“依赖项”对python列表进行排序

时间:2018-10-12 14:27:58

标签: python sorting

假设我要排序以下列表data_bytes = { << byte {j}};

shutdown /r /t 0

要通知排序,我有以下“ dependencies”字典,其中在的列表中如果,则该值< / strong>的排序必须高于列表foo中的

foo = [63,64,65]

例如,查看列表foo,我们在索引bar = { 63: [64, 65], 64: [65] } 上看到值foo。但是,在检查字典63时,我们发现0具有“依赖项” bar63,因此这两个值在64中的排序必须更高。 / p>

我相信我可以将一些东西拼凑在一起,但是对解决这种分类情况的算法和/或其他方法很感兴趣。谢谢。

更新:许多评论指出这很可能是图形/拓扑问题。为此,事实上,这是对图形中的节点进行排序的一项较大任务的一部分。

更新:建议toposort查看,这完全符合要求。

1 个答案:

答案 0 :(得分:3)

因此,将所有评论放在一起:

您的情况对应于有向图,其中每个边都是从属。排序有向(非循环)图或简称DAG的正确方法称为topological sorting

在Python中,已经有一个可以执行此操作的软件包toposort。 但是,它要求您的值是集合,而不是列表,但这很容易解决:

colnames(df)<- <cols from data>

由于听起来您的图表可能包含不在from toposort import toposort_flatten bar = { 63: [64, 65], 64: [65] } graph = dict(zip(bar.keys(), map(set, bar.values()))) sorted_graph = toposort_flatten(graph, sort=True) 中的条目,因此您可以像这样对foo进行排序:

foo

或者,如果图形比您要排序的列表大很多(并且迭代需要很多时间),请构建一个字典:

foo = [63,64,65]
foo_set = set(foo)
foo_sorted = [x for x in sorted_graph if x in foo_set]
print(foo_sorted)
# [65, 64, 63]