2010-06-23 60 views
0

我有一个未排序的对象列表,每个列表都有一个end_date属性。基于对象属性对列表中的对象进行排序/分类的最有效方法

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

我想用一个看起来像这样的列表,以结束:

[ “周六,5月5日”,[OBJ 3,obj5],[ “周一,5月7日”,[OBJ1,obj8, obj9]] ... etc]

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

什么是最有效的方法来做到这一点?我一直在通过一些for循环来解决一些问题,但似乎我错了。

+0

你尝试过什么?请显示你的混淆代码。它有助于提出更多**具体**问题。 – 2010-06-23 02:23:42

+0

完全使用不同的方法 - 首先使用sort(key = lambda obj:obj.date)按日期排序列表,然后传递给django模板引擎并使用重组函数。谢谢您的帮助! – Andrew 2010-07-06 04:35:44

回答

0

你说你知道如何得到一个字典。所以,仅仅对结果进行排序:

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

应该O(n log n)

您可以到sorted提供的排序方法为好,如果你想操纵你的日期类型。看到一个sorting in python overview

0

把它放进字典,然后使用l=list(dictionary.iteritems())以获取列表和l.sort()对它进行排序

1
itertools.groupby(sorted(L, key=operator.attrgetter('end_date')), 
    key=operator.attrgetter('end_date')) 
相关问题