我在Python中有一个这样的列表
myList = ['http://google.com Google 2018-07-10', 'http://apple.com Apple Inc 2018-07-11', 'http://microsoft.com Microsoft 2018-07-12']
我想按日期对列表进行排序
答案 0 :(得分:2)
在sorted
中将lambda
与key
一起使用
例如:
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']