根据对象属性对列表中的对象进行排序/分类的最有效方法
我有一个没有排序的对象列表,每个对象都有一个结束日期(end_date)属性。
这个列表看起来像这样:[obj1, obj2, obj3, <...>],顺序是乱的。
我想要的结果是这样的列表:
[["星期六, 5月5日", [obj3, obj5]], ["星期一, 5月7日", [obj1, obj8, obj9]] ...等等]
简单来说,就是一个列表的列表,其中“键”是对象中的日期,而这个键对应的值是拥有这个日期的对象列表。日期格式我不担心,这只是简单的日期时间处理。我知道用字典来做这个相对简单,但我需要的是一个按键排序的列表,而用字典是无法做到这一点的(至少在我记得的Python 2.6中是这样)。
那么,最有效的方法是什么呢?我试着用很多个循环来解决这个问题,但感觉我走错了方向。
3 个回答
你说你知道怎么把它变成字典。那么,只需要对结果进行排序:
d = ToDict(...)
sorted_values = sorted(((date,list) for date,list in d.iteritems()))
这个过程的复杂度应该是 O(n log n)
如果你想对日期类型进行处理,还可以给 sorted
提供一个排序方法。可以查看一下 Python中的排序概述。
把它放进一个字典里,然后用 l=list(dictionary.iteritems())
这个代码把字典转换成一个列表,接着用 l.sort()
来对这个列表进行排序。
itertools.groupby(sorted(L, key=operator.attrgetter('end_date')),
key=operator.attrgetter('end_date'))
当然可以!请看下面的内容:
这个问题主要是关于如何在编程中处理一些特定的情况。通常,程序员在写代码时会遇到各种各样的问题,比如如何让程序更高效,或者如何避免错误。
在这个讨论中,大家分享了不同的解决方案和思路。有的人建议使用某种方法来简化代码,这样可以让代码更容易理解和维护。还有人提到了一些常见的错误,以及如何避免这些错误的方法。
总的来说,这个话题涉及到编程中的一些实用技巧和经验,适合那些刚开始学习编程的人。通过这些讨论,初学者可以更好地理解如何写出更好的代码,以及如何解决在编程过程中遇到的问题。
希望这些信息对你有帮助!