4

我的字典中有一个日期字段Mon Apr 25 13:32:00 PDT 2013我想按日期字段排序我的项目列表。

dictionarylist.sort(key=operator(fieldposition)不管用。有什么帮助吗?

我也想保留时间字段?

示例数据(来自评论):

{
    '11163722404385': [
        ('#3', 'Biology', 'A', 'Mon Apr 22 13:32:00 PDT 2013'),
        ('#3', '2089','Irdu', 'B', 'Wed Apr 10 15:31:00 PDT 2013')
    ], 
    '1116372240485': [
        ('#3', '2089','Biology', 'C', 'Mon Apr 25 13:32:00 PDT 2013'),
        ('#3', '2089', 'Math', 'A', 'Mon Apr 22 13:31:14 PDT 2013'),
        ('#3', '2089', 'Literature','C','Mon Apr 22 13:31:00 PDT 2013')
    ]
}
4

2 回答 2

2

您应该首先将日期字符串转换为 pythondatetime对象,请参阅datetime.strptime将字符串转换为datetime对象。

要记住的一件事是您将遇到时区问题(除非您将其转换为 GMT 偏移量)。作为一种解决方法,我建议使用dateutil模块而不是datetime. 优点dateutil是更容易使用并且仍然返回datetime对象。

from dateutil import parser
dst_string = 'Mon Apr 25 13:32:00 PDT 2013'
date_obj = parser.parse(dst_str)
print date_obj
>>> datetime.datetime(2013, 4, 25, 13, 32)

datetime然后,您可以按对象的日期排序。

sorted(d['11163722404385'], key=lambda x: x[-1].date())

编辑:正如@Mark Ransom 指出的时区可能特别棘手。通常,您必须自己处理缩写(PDT、EST、...),因为时区命名没有明确定义。dateutil 您可以在此处了解有关处理缩写时区的更多信息。

于 2013-05-22T21:07:37.400 回答
1

您可以使用关键函数(链接strptime)对列表进行排序,该函数应使用(链接)将日期字符串转换为时间。

import time

def to_time(tup):
    return time.strptime(tup[4], "%a %b %d %X PDT %Y")

sorted(defaultdict['1116372240485'], key=to_time)

这只会对您的每个字典条目进行排序,而不是对整个字典进行排序。

于 2013-05-22T20:50:10.720 回答