我有两个列表,第一个列表是键顺序,第二个列表是一个元组列表。
colorOrder = ['red', 'blue', 'yellow', 'green']
tupleList = [(111,'red'),(222,'pink'),(333,'green')]
请注意这两个列表不是一对一的关系。 colorOrder
中没有一些颜色,colorOrder
中的一些颜色从未出现在 tupleList
中。所以它不同于其他类似的重复问题。
我需要根据 colorOrder 对 tupleList 进行排序。
我可以使用两个嵌套的 for 循环来解决这个问题,但需要一个更高效的解决方案。
#First sort according to the color order
for aColor in colorOrder:
for aTuple in tupleList:
if aTuple[1] == aColor:
ResultList.append(aTuple)
#Second add the tuples to the ResultList, whose color is not in the colorOrder
for aTuple in tupleList:
if aTuple[1] not in colorOrder:
ResultList.append(aTuple)
最佳答案
首先,我将 colorOrder
设为一个映射:
colorMap = {c: i for i, c in enumerate(colorOrder)}
现在使用 colorMap.get
排序变得更容易一些
sorted(tupleList, key=lambda tup: colorMap.get(tup[1], -1))
这会将不在 map 中的东西放在第一位。如果您希望将它们添加到最后,只需使用一个非常大的数字:
sorted(tupleList, key=lambda tup: colorMap.get(tup[1], float('inf')))
关于Python 根据另一个列表对一个列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28601613/