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

发布于 2021-01-29 19:34:21

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

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

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

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    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__。其他四个可以通过简单的逻辑从这两个派生。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看