1

我有一个类似以下的列表:

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

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

4

3 回答 3

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)
于 2013-08-08T18:56:03.233 回答
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()更多信息,请参阅。

于 2013-08-08T18:47:54.077 回答
-1

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

将日期时间导入为 dt

list = [{'modified': 'Thu, 08 Aug 2013 18:28:13 +0000', 'path': '/test4.txt'}, {'modified': 'Thu, 06 Aug 2013 18:28: 17 +0000', '路径': '/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'}]
于 2013-08-08T18:48:00.263 回答