python datetime错误排序

时间:2017-07-04 18:26:58

标签: python sorting tkinter

我收到一些数据库日期,他们可能会混淆。 我使用sorted()方法定期打印这些日期

datelist = ["1 2017", "2 2017", "6 2017",  "7 2017", "8 2017", "3 2017", "4 2017", "5 2017", "9 2017", "10 2017", "11 2017", "12 2017"]

for i in sorted(datelist):
        print(i)

但结果很可怕......!

1 2017
10 2017
11 2017
12 2017
2 2017
3 2017
4 2017
5 2017
6 2017
7 2017
8 2017
9 2017

如何定期获取这些值? 在此先感谢您的帮助

2 个答案:

答案 0 :(得分:2)

使用key sorted参数解析字符串并按datetime排序:

from datetime import datetime
datelist = ["1 2017", "2 2017", "6 2017",  "7 2017", "8 2017", "3 2017", "4 2017", "5 2017", "9 2017", "10 2017", "11 2017", "12 2017"]
for i in sorted(datelist,key=lambda s: datetime.strptime(s,'%m %Y')):
    print(i)

输出:

1 2017
2 2017
3 2017
4 2017
5 2017
6 2017
7 2017
8 2017
9 2017
10 2017
11 2017
12 2017

答案 1 :(得分:1)

这是因为您正在对字符串值执行排序,并且字符串的排序已完成lexicographically。为了按数字升序对列表中的字符串进行排序,您可以将key参数作为 lambda 函数传递给sorted

>>> datelist = ["1 2017", "2 2017", "6 2017",  "7 2017", "8 2017", "3 2017", "4 2017", "5 2017", "9 2017", "10 2017", "11 2017", "12 2017"]

>>> sorted(datelist, key=lambda x: [int(y) for y in x.split()])
['1 2017', '2 2017', '3 2017', '4 2017', '5 2017', '6 2017', '7 2017', '8 2017', '9 2017', '10 2017', '11 2017', '12 2017']