当前位置: 首页 > 面试题库 >

具有多个属性和混合顺序的列表排序

宓英哲
2023-03-14
问题内容

我必须对具有多个属性的列表进行排序。我可以轻松地按升序对所有属性执行此操作

L.sort(key=operator.attrgetter(attribute))....

但是问题是,我必须使用混合配置来进行升序/降序…我必须“模仿”一点SQL Order By,在SQL中您可以执行类似的操作name ASC, year DESC。有没有一种方法可以在Python中轻松实现,而无需实现自定义比较功能?


问题答案:

如果您的属性是数字,则具有此属性。

def mixed_order( a ):
    return ( a.attribute1, -a.attribute2 )

someList.sort( key=mixed_order )

如果您的属性包括字符串或其他更复杂的对象,则可以选择。

.sort()方法很稳定:您可以进行多次通过。这也许是最简单的。它也非常快。

def key1( a ): return a.attribute1
def key2( a ): return a.attribute2

someList.sort( key=key2, reverse=True )
someList.sort( key=key1 )

如果这是唯一的排序,则可以定义自己的专用比较运算符。最少,您需要__eq____lt__。其他四个可以通过简单的逻辑从这两个派生。



 类似资料:
  • 我正在使用JAXB来解封xml文件。这是我的元素特性代码,但是我想在元素特性中有一个特殊的元素顺序,像这样 我检查了一些@XmlType教程(propOrder = {}),但我找不到一种方法来订购元素列表,如这里的属性元素。 这是我的代码。 它总是抛出异常,因为我在propOrder中只定义了一个属性。但是由于属性是多重的,可能是一个或多个,我不知道如何实现它。或者你知道其他排序元素的方法吗 提

  • 问题内容: 我有一个清单清单: 如果要按一个元素(例如,高/短元素)排序,可以通过进行。 如果我想作为排序依据两个高大和颜色,我可以为每个元素做排序两次,一次,但有一个更快的方法? 问题答案: 键可以是返回元组的函数: 或者,你可以使用来实现相同的效果(速度更快,并且避免了Python函数调用): 并请注意,你可以在此处使用而不是使用,然后重新分配:

  • 在ORM映射类上定义具有“混合”行为的属性。 “混合”是指属性在类级别和实例级别定义了不同的行为。 这个 hybrid 扩展提供了一种特殊形式的方法修饰器,大约有50行代码,几乎不依赖于其他的sqlacalchemy。理论上,它可以与任何基于描述符的表达式系统一起工作。 考虑映射 Interval ,表示整数 start 和 end 价值观。我们可以在生成类级SQL表达式的映射类上定义更高级别的函

  • 我想对一个dataTable进行排序,该dataTable具有名为“CustomerName”的列,该列需要根据Customer的FirstName和LastName进行排序。因此,我希望将值传递给sortBy属性,如下所示sortBy=“customertable.firstname,customertable.lastname” 当我尝试此操作时,我得到一个解析器错误,说明该字符串 我可以用一

  • 问题内容: 当前,我的项目使用,因此当我按此列排序时,它是根据中的顺序进行排序的,效果很好。但是我需要在中添加一些附加值,这些附加值需要插入到枚举值列表中的不同位置,并且不能仅仅添加到底部以保持正确的排序顺序。 如果这样做,我的数据库将会混乱。我将不得不编写一些脚本来将所有这些序数值转换为正确的新序数。有可能以后必须添加更多状态。由于必须修复数据库中的所有数据,因此只需要执行一次,因为这将是一项艰