如何用日期对Python列表进行排序

时间:2018-08-02 11:52:56

标签: python python-3.x

我在Python中有一个这样的列表

myList = ['http://google.com Google 2018-07-10', 'http://apple.com Apple Inc 2018-07-11', 'http://microsoft.com Microsoft 2018-07-12']

我想按日期对列表进行排序

4 个答案:

答案 0 :(得分:2)

sorted中将lambdakey一起使用

例如:

myList = ['http://google.com Google 2018-07-10', 'http://apple.com Apple Inc 2018-07-11', 'http://microsoft.com Microsoft 2018-07-12']

print( sorted(myList, key= lambda x: x.split()[-1], reverse=True) )
print( sorted(myList, key= lambda x: x.split()[-1]) )

输出:

['http://microsoft.com Microsoft 2018-07-12', 'http://apple.com Apple Inc 2018-07-11', 'http://google.com Google 2018-07-10']
['http://google.com Google 2018-07-10', 'http://apple.com Apple Inc 2018-07-11', 'http://microsoft.com Microsoft 2018-07-12']

答案 1 :(得分:2)

您可以分割每个字符串,取最后一部分,然后按该部分排序:

myList = [
    'http://apple.com Apple Inc 2018-07-11', 
    'http://google.com Google 2018-07-10',     
    'http://microsoft.com Microsoft 2018-07-12'
]

sorted(myList, key=lambda s: s.split()[-1])

输出:

['http://google.com Google 2018-07-10',
 'http://apple.com Apple Inc 2018-07-11',
 'http://microsoft.com Microsoft 2018-07-12']

答案 2 :(得分:2)

您还可以通过将datetime.strptime()应用于key来对列表进行排序:

>>> from datetime import datetime
>>> myList = ['http://google.com Google 2018-07-10', 'http://apple.com Apple Inc 2018-07-11', 'http://microsoft.com Microsoft 2018-07-12']
>>> sorted(myList, key=lambda x: datetime.strptime(x.split()[-1], '%Y-%m-%d'))
['http://google.com Google 2018-07-10', 'http://apple.com Apple Inc 2018-07-11', 'http://microsoft.com Microsoft 2018-07-12']

注意:这可能会使它稍微复杂一些,因为ISO格式的日期和对字符串日期的排序都很好,如其他答案所示。使用strptime()只是为了确保按照正确的日期格式对日期进行排序。

答案 3 :(得分:2)

这是一种应在更一般的情况下工作的方法:

from dateutil.parser import parse

myList = [
    'http://google.com Google 2018-07-10',
    'http://apple.com Apple Inc 2018-07-11',
    'Foo 2017-07-13 http://whatever.com',
    'http://microsoft.com Microsoft 2018-07-12',
    '2015-07-15 http://whatever.com Whatever'
]

dct = {parse(v, fuzzy=True): v for v in myList}
print([dct[k] for k in sorted(dct, reverse=True)])
print([dct[k] for k in sorted(dct)])

这样,您将不会被迫在列表字符串的末尾添加日期,输出:

['http://microsoft.com Microsoft 2018-07-12', 'http://apple.com Apple Inc 2018-07-11', 'http://google.com Google 2018-07-10', 'Foo 2017-07-13 http://whatever.com', '2015-07-15 http://whatever.com Whatever']
['2015-07-15 http://whatever.com Whatever', 'Foo 2017-07-13 http://whatever.com', 'http://google.com Google 2018-07-10', 'http://apple.com Apple Inc 2018-07-11', 'http://microsoft.com Microsoft 2018-07-12']