我有一个未排序的对象列表,每个对象都有一个end_date属性。
列表看起来像[obj1,obj2,obj3,< ...>],没有特定的顺序。
我希望最终得到一个如下所示的列表:
<[> [[“5月5日星期六”,[obj3,obj5]],[“星期一,5月7日”,[obj1,obj8,obj9]]等等基本上只是一个列表列表,其中“key”是来自对象的日期,该键的值是具有该日期的对象列表。不要担心日期格式化,这只是一个简单的日期时间操作。我知道用字典做起来比较容易,但是我需要最后得到一个按键排序的列表,你不能用字典做这个(至少不能用Python 2.6 IIRC)
最有效的方法是什么?我一直在用一堆for循环来解决一些解决方案,但似乎我错了。
答案 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()
对其进行排序