繁体   English   中英

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

sorting python list based on "dependencies" from dictionary

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设我有以下列表foo想要排序:

foo = [63,64,65]

为了通知排序,我有以下“依赖项”字典,其中如果某个key的列表中,则该值的排序必须高于列表foo

bar = {
    63: [64, 65],
    64: [65]
}

例如,查看列表foo ,我们在索引0处看到值63 但是,检查字典bar ,我们看到63具有“依赖项” 6465 ,因此这两个值必须在foo排序更高。

我相信我可以拼凑出一些东西,但我对算法和/或其他方法来解决这种排序场景感兴趣。 谢谢。

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

更新:建议查看toposort ,这正好符合要求。

1 个回复

所以,把所有的评论放在一起:

您的情况对应于有向图,其中每条边都是一个依赖项。 对有向(非循环)图或短 DAG 进行排序的正确方法称为拓扑排序

在 Python 中已经有一个包可以做到这一点, toposort 但是,它要求您的值是集合,而不是列表,但这很容易修复:

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]

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

graph_sorted_lookup = {x: i for i, x in enumerate(sorted_graph)}
foo_sorted = sorted(foo, key=graph_sorted_lookup.get)
1 Python:对依赖项列表进行排序

我正在尝试使用内置的sorted()函数解决我的问题,或者如果我需要自己做-使用cmp的老派相对容易。 我的数据集如下所示: 排序规则基本上应该适用于N和Y的所有值,其中Y> N,x [N] [0]不在x [Y] [1]中 尽管我正在使用cmp参数仍然可用的Python ...

2 在Python 3中对字典列表进行排序

我正在尝试对词典列表进行排序。 我的目标是以相同的方式对具有多个(可能是相同的)键的字典进行排序,即使字典的顺序不同或字典中的键的顺序也不同。 在Python 2中,我使用了以下内容: 这成功实现了我创建两个看起来完全相同的排序字典的目标。 我正在尝试在Python 3中做 ...

3 在python中对字典列表进行排序

我有一个对象是字典列表的列表: 我想按每个嵌套列表的字典中的play值之和对列表进行排序。 然后对象将按如下方式排序: 如果它只是一个dicts列表,那么: sorted(myObject, key=sum(map(itemgetter(play))), reverse=T ...

6 根据python中的字典值对列表进行排序?

假设我有一本字典,然后我有一个包含字典键的列表。 有没有办法根据字典值对列表进行排序? 我一直在尝试这个: 我去使用: 并得到: 然后我去创建一个可以用trial_dict.get()调用的函数: 我不认为sort_help函数对排序有任何影响。 我不确定使用trial_dict. ...

8 Python根据字典项的总和对字典进行排序

我具有以下需要排序的数据结构。 对于每个具有相同高度的物品箱,我需要获取面积的总和和权重的总和,然后按比例对垃圾箱进行排序。 bins的关键是高度,每个箱中都有一个项目列表。 我试图提出一些建议,但是我没有运气。 问题是这将返回一个列表。 无论如何要保留字典对象。 我 ...

9 Python对字典列表进行排序

我有一个这样的字典列表: 当键“名称”包含单词“[test]”时,我需要排除所有字典,然后按值“名称”排序。 我该怎么做? 提前致谢 ...

2020-04-13 19:12:25 2 75   python
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM