按属性对对象列表进行排序[重复]

Posted

技术标签:

【中文标题】按属性对对象列表进行排序[重复]【英文标题】:Sorting a list of objects by attribute [duplicate] 【发布时间】:2010-10-26 17:02:11 【问题描述】:

我正在尝试在 python 中对对象列表进行排序,但是此代码不起作用:

import datetime

class Day:
    def __init__(self, date, text):
        self.date = date
        self.text = text

    def __cmp__(self, other):
        return cmp(self.date, other.date)

mylist = [Day(datetime.date(2009, 01, 02), "Jan 2"), Day(datetime.date(2009, 01, 01), "Jan 1")]
print mylist
print mylist.sort()

这个的输出是:

[<__main__.Day instance at 0x519e0>, <__main__.Day instance at 0x51a08>]
None

有人可以告诉我一个解决这个问题的好方法吗?为什么sort()函数返回None

【问题讨论】:

【参考方案1】:

mylist.sort() 什么都不返回,它对列表进行适当的排序。改成

mylist.sort()
print mylist

查看正确的结果。

见http://docs.python.org/library/stdtypes.html#mutable-sequence-types注7。

sort() 和 reverse() 方法 修改清单以节省成本 排序或反转a时的空间 大名单。提醒你他们 按副作用操作,他们不会 返回排序或反转的列表。

【讨论】:

-1:文档中没有引用。【参考方案2】:

请参阅sorted 了解将返回任何可迭代的排序副本的函数。

【讨论】:

'sorted' 不会修改原始列表。有时您想修改原始列表,有时您不想。 我知道。这就是它返回“排序副本”而不是“对排序列表的引用”的原因。

以上是关于按属性对对象列表进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按属性值对对象列表进行排序[重复]

C# LINQ 组按属性集合,然后按列表定义的显式顺序对每个组进行排序[重复]

按列表的属性对列表进行排序[重复]

按特定属性对类列表进行排序[重复]

PHP - 按对象属性对对象数组进行排序[重复]

Java按日期升序排序列表对象[重复]