如何按照修改日期的列表元素在Python中对文件进行排序?

时间:2013-08-08 18:44:25

标签: python list sorting

我有一个如下列表:

[{'modified': 'Thu, 08 Aug 2013 18:28:13 +0000', 'path': '/test4.txt'},
 {'modified': 'Thu, 06 Aug 2013 18:28:17 +0000', 'path': '/test5.txt'},
 ...
]

等等。 我希望按照时间顺序(或按时间顺序顺序)按“修改”对列表进行排序。这样做的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

您的排序功能需要先了解日期,否则只会按工作日的字母排序。

dateutil包非常适合此任务。它会自动识别日期,不需要像datetime.strptime这样的格式字符串。

from dateutil import parser

# sort ascending
print sorted(yourlist, key=lambda k: parser.parse(k['modified']))

# sort descending
print sorted(yourlist, key=lambda k: parser.parse(k['modified']), reverse=True)

答案 1 :(得分:1)

from datetime import datetime
strfmt = '%a, %d %b %Y %H:%M:%S +0000'
res = sorted(files, key=lambda e: datetime.strptime(e['modified'], strfmt))

反过来说,使用可选的布尔reverse参数:

rev = sorted(files, key=..., reverse=True)

有关详细信息,请参阅sorted()

答案 2 :(得分:-1)

使用python's sorted function的“key”参数。如果你真的想按时间顺序排序,你还必须以某种方式解析日期字符串。我使用下面的日期时间(似乎无法正确处理时区):

将日期时间导入为dt

list = [{'modified':'Thu,2013年8月8日18:28:13 +0000','path':'/ test4.txt'},{'modified':'星期四,2013年8月6日18 :28:17 +0000','path':'/ test5.txt'}]

list.sort(key = lambda d:dt.datetime.strptime(d ['modified'],'%a,%d%b%Y%H:%M:%S +0000'))

打印列表

输出:

[{'path': '/test5.txt', 'modified': 'Thu, 06 Aug 2013 18:28:17 +0000'}, {'path': '/test4.txt', 'modified': 'Thu, 08 Aug 2013 18:28:13 +0000'}]