我有一个有序列表:
ordering = ["red", "green", "blue", "yellow", "orange"]
还有一个较小的无序列表,我想根据这个列表进行排序:
unordered = ["blue", "orange", "red"]
给出结果:
["red", "blue", "orange"]
这似乎是已经有人问过的那种问题,但我已经解决了所有我能找到的措辞相似的问题,但没有一个能解决这个问题。
答案 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)
我认为您可以制作另一个(第三个)列表,按照第一个列表的顺序搜索第二个列表中的项目,然后删除第二个列表中的每个项目并替换为第三个列表中的项目