[英]Sort a list of Objects based on another list sort
我一直在寻找一种基于另一个 int 列表的排序顺序对对象进行排序的方法,但我还没有找到。
我试过了
newList = [element for _,element in sorted(zip(listOfInt, listOfObjects))]
但它显示以下错误:
"'<' not supported between instances of 'Object' and 'Object'"
我认为问题出在“sorted(zip(listOfInt, listOfObjects))”部分,但我不知道如何解决这个问题,或者是否有其他方法可以解决。
你可以这样写:
newList = [
elem[1]
for elem in sorted(zip(listOfInt, listOfObjects), key=lambda tup: tup[0])
]
zip
对List[int]
和List[Object]
的应用在这里返回一个Tuple[int, Object]
的序列。 sorted
的key
允许您定义相对于列表中元素的排序键(在这种情况下,取整数)。 list
的sort
方法支持相同的参数(这里是文档)。 外部理解在排序后获取您关心的元组的元素( Object
)。 鉴于您想要的是沿整数列表对List[Object]
进行排序,这应该可以工作。
这个错误的原因:
'<' not supported between instances of 'Object' and 'Object'
就是如果你不指定key
,这里的比较在Tuple[int, Object]
之间。 比较每个元组时,先比较int
,如果int
不能确定结果,再比较Object
(所以Object
必须支持比较方法)。
通常,如果listOfInts
不包含重复项,您的方法会很好。 列表和元组按字典顺序进行比较,因此当存在重复时,将比较每个元组中的第二个元素。 为了防止这种情况发生,您可以在不可比较对象之前插入一个元素到键中:
newList = [element for _, (_, element) in sorted(zip(listOfInt, enumerate(listOfObjects)))]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.