我有一个如下列表:
[{'modified': 'Thu, 08 Aug 2013 18:28:13 +0000', 'path': '/test4.txt'},
{'modified': 'Thu, 06 Aug 2013 18:28:17 +0000', 'path': '/test5.txt'},
...
]
等等。 我希望按照时间顺序(或按时间顺序顺序)按“修改”对列表进行排序。这样做的最佳方法是什么?
答案 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'}]