Python 基于另一个列表排序对对象列表进行排序
我一直在寻找一种基于另一个int列表的排序顺序对对象进行排序的方法,但我没有找到 我试过了Python 基于另一个列表排序对对象列表进行排序,python,list,sorting,object,Python,List,Sorting,Object,我一直在寻找一种基于另一个int列表的排序顺序对对象进行排序的方法,但我没有找到 我试过了 newList = [element for _,element in sorted(zip(listOfInt, listOfObjects))] 但它会显示以下错误: "'<' not supported between instances of 'Object' and 'Object'" “”你可以这样写: newList = [ elem[1] fo
newList = [element for _,element in sorted(zip(listOfInt, listOfObjects))]
但它会显示以下错误:
"'<' not supported between instances of 'Object' and 'Object'"
“”你可以这样写:
newList = [
elem[1]
for elem in sorted(zip(listOfInt, listOfObjects), key=lambda tup: tup[0])
]
将zip
应用于List[int]
和List[Object]
将返回
Tuple[int,Object]
排序的键的序列允许您相对于列表中的元素定义排序键(在本例中,使用整数)。list
的sort
方法支持相同的参数()。外部理解获取您关心的元组元素(对象
)后期排序。如果您希望沿着整数列表对[Object]
列表进行排序,那么这应该可以工作
出现此错误的原因:
'<' not supported between instances of 'Object' and 'Object'
”通常,如果listOfInts
不包含重复项,您的方法就可以了。列表和元组是按字典顺序进行比较的,因此当存在重复项时,会比较每个元组中的第二个元素。为防止发生这种情况,您可以在不可比较对象之前在键中插入一个元素:
newList = [element for _, (_, element) in sorted(zip(listOfInt, enumerate(listOfObjects)))]
请发布格式正确的McVet。这种情况可能发生,因为intsMaybe np中有重复项。argsort将非常有用。您会遇到此错误,因为它试图对没有键的对象进行排序