基于对象属性对列表中的对象进行排序/分类的最有效方法

时间:2010-06-23 02:12:51

标签: python django

我有一个未排序的对象列表,每个对象都有一个end_date属性。

列表看起来像[obj1,obj2,obj3,< ...>],没有特定的顺序。

我希望最终得到一个如下所示的列表:

<[> [[“5月5日星期六”,[obj3,obj5]],[“星期一,5月7日”,[obj1,obj8,obj9]]等等

基本上只是一个列表列表,其中“key”是来自对象的日期,该键的值是具有该日期的对象列表。不要担心日期格式化,这只是一个简单的日期时间操作。我知道用字典做起来比较容易,但是我需要最后得到一个按键排序的列表,你不能用字典做这个(至少不能用Python 2.6 IIRC)

最有效的方法是什么?我一直在用一堆for循环来解决一些解决方案,但似乎我错了。

3 个答案:

答案 0 :(得分:1)

itertools.groupby(sorted(L, key=operator.attrgetter('end_date')),
  key=operator.attrgetter('end_date'))

答案 1 :(得分:0)

你说你知道如何把它变成一个词典。所以,只需对结果进行排序:

d = ToDict(...)
sorted_values = sorted(((date,list) for date,list in d.iteritems()))

应为O(n log n)

如果您想操纵日期类型,也可以为sorted提供排序方法。请参阅sorting in python overview

答案 2 :(得分:0)

将其放入字典中,然后使用l=list(dictionary.iteritems())获取列表,并使用l.sort()对其进行排序