根据较大列表的顺序对列表进行排序

时间:2021-03-18 22:28:28

标签: python python-3.x

我有一个有序列表:

ordering = ["red", "green", "blue", "yellow", "orange"]

还有一个较小的无序列表,我想根据这个列表进行排序:

unordered = ["blue", "orange", "red"]

给出结果:

["red", "blue", "orange"]

这似乎是已经有人问过的那种问题,但我已经解决了所有我能找到的措辞相似的问题,但没有一个能解决这个问题。

5 个答案:

答案 0 :(得分:5)

sort() 有一个参数可以让你编写一个排序函数。您可以按如下方式使用此排序功能:

unordered.sort(key=lambda x: ordering.index(x))

答案 1 :(得分:4)

这是一个简单的解决方案:

ordering = ["red", "green", "blue", "yellow", "orange"]
unordered = ["blue", "orange", "red"]

[x for x in ordering if x in unordered]

答案 2 :(得分:1)

ordering = ["red", "green", "blue", "yellow", "orange"]
unordered = ["blue", "orange", "red"]
d = {k:v for v,k in enumerate(ordering)}
unordered.sort(key=d.get)
    
print(unordered)

答案 3 :(得分:0)

给你的颜色一个数值并使用它们对你的无序列表进行排序

ordering = ["red", "green", "blue", "yellow", "orange"]

ordering_dict = {key: i for i, key in enumerate(ordering)}
unordered = ["blue", "orange", "red"]

sorted_list = sorted(unordered, key=lambda x: ordering_dict[x])

答案 4 :(得分:-2)

我认为您可以制作另一个(第三个)列表,按照第一个列表的顺序搜索第二个列表中的项目,然后删除第二个列表中的每个项目并替换为第三个列表中的项目

相关问题