我有一个类似以下的列表:
[{'modified': 'Thu, 08 Aug 2013 18:28:13 +0000', 'path': '/test4.txt'},
{'modified': 'Thu, 06 Aug 2013 18:28:17 +0000', 'path': '/test5.txt'},
...
]
等等。我想按时间顺序(或逆时间顺序)按“修改”对列表进行排序 这样做的最佳方法是什么?
您的排序函数需要首先了解日期,否则它将仅按工作日的字母排序。
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)
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()
更多信息,请参阅。
使用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'}]