【问题标题】:Sort a list of Objects based on another list sort根据另一个列表排序对对象列表进行排序
【发布时间】:2023-04-01 08:02:01
【问题描述】:

我一直在寻找一种基于另一个 int 列表的排序顺序对对象进行排序的方法,但我没有找到。

我试过了

newList = [element for _,element in sorted(zip(listOfInt, listOfObjects))]

但它显示以下错误:

"'<' not supported between instances of 'Object' and 'Object'"

我认为问题出在“sorted(zip(listOfInt, listOfObjects))”部分,但我不知道如何解决这个问题,或者是否有其他方法。

【问题讨论】:

  • 请发布格式正确的 MCVE
  • 这可能是因为整数中有重复项
  • 也许 np.argsort 会有用。您收到该错误是因为它正在尝试对没有键的对象进行排序

标签: python list sorting object


【解决方案1】:

通常,如果listOfInts 不包含重复项,您的方法会很好。列表和元组按字典顺序进行比较,因此当存在重复时,将比较每个元组中的第二个元素。为了防止这种情况发生,您可以在不可比对象之前插入一个元素到键中:

newList = [element for _, (_, element) in sorted(zip(listOfInt, enumerate(listOfObjects)))]

【讨论】:

    【解决方案2】:

    你可以这样写:

    newList = [
        elem[1]
        for elem in sorted(zip(listOfInt, listOfObjects), key=lambda tup: tup[0])
    ]
    

    zipList[int]List[Object]的应用这里返回 Tuple[int, Object] 的序列。 sortedkey 允许您定义相对于列表中元素的排序键(在这种情况下,取整数)。 listsort 方法支持相同的参数 (here's the documentation)。外部理解在排序后获取您关心的元组的元素(Object)。鉴于您想要对 List[Object] 沿整数列表进行排序,这应该可以工作。

    这个错误的原因:

    '<' not supported between instances of 'Object' and 'Object'
    

    如果您指定key,那么这里的比较是在Tuple[int, Object]s 之间。比较每个元组时,首先比较ints,如果ints 无法确定结果,然后比较Objects(所以@987654339 @ 必须支持比较方法)。

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2021-05-02
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多