簡體   English   中英

Python-日期上的Itemgetter

[英]Python - Itemgetter on Dates

from operator import itemgetter

a=[['','27/01/2014'],['','28/01/2014'],['','29/01/2014'],['','30/01/2014'],['','31/01/2014'],['','01/02/2014'],['','02/02/2014']]

b=sorted(a,key=itemgetter(-1))

輸出:

[['', '01/02/2014'], ['', '02/02/2014'], ['', '27/01/2014'], ['', '28/01/2014'], ['', '29/01/2014'], ['', '30/01/2014'], ['', '31/01/2014']]

為什么itemgetter會產生此結果?

我在示例中知道日期是按升序排列的,但是假設它們不是,是否有一個函數可以簡單地做到這一點?

日期存儲為字符串,因此按字典順序進行排序。 如果要將其排序為日期,則應使用datetime.strptime

import datetime
b=sorted(a,key=lambda x:datetime.datetime.strptime(x[-1], '%d/%m/%Y'))

輸出:

[['', '27/01/2014'], ['', '28/01/2014'], ['', '29/01/2014'], ['', '30/01/2014'], ['', '31/01/2014'], ['', '01/02/2014'], ['', '02/02/2014']]

按照您的要求對它們進行排序。 當然,您的日期是字符串,並且字符串按字典順序排序。 如果您的日期為ISO 8601格式,則這僅等效於日期的自然排序順序。 你不是。

嘗試通過將其轉換為key函數中的datetime對象進行排序:

sorted(a,key=lambda x: datetime.strptime(x[1],'%d/%m/%Y'))
Out[18]: 
[['', '27/01/2014'],
 ['', '28/01/2014'],
 ['', '29/01/2014'],
 ['', '30/01/2014'],
 ['', '31/01/2014'],
 ['', '01/02/2014'],
 ['', '02/02/2014']]

你那里沒有約會。 你碰巧包含日期的字符串表示的字符串 這樣,當您按字符串排序時,就是使用標准詞典順序對其進行排序

如果要按日期排序,則實際上需要解釋這些字符串。 例如,使用datetime:

>>> a = [['','27/01/2014'],['','28/01/2014'],['','29/01/2014'],['','30/01/2014'],['','31/01/2014'],['','01/02/2014'],['','02/02/2014']]
>>> a.sort(key=lambda x: datetime.strptime(x[-1], '%d/%m/%Y'))
>>> a
[['', '27/01/2014'], ['', '28/01/2014'], ['', '29/01/2014'], ['', '30/01/2014'], ['', '31/01/2014'], ['', '01/02/2014'], ['', '02/02/2014']]

如果您想使用日期,則將它們轉換為日期時間對象可能是一個好主意:

>>> b = [[a, datetime.strptime(b, '%d/%m/%Y')] for a, b in a]
>>> b
[['', datetime.datetime(2014, 1, 27, 0, 0)], ['', datetime.datetime(2014, 1, 28, 0, 0)], ['', datetime.datetime(2014, 1, 29, 0, 0)], ['', datetime.datetime(2014, 1, 30, 0, 0)], ['', datetime.datetime(2014, 1, 31, 0, 0)], ['', datetime.datetime(2014, 2, 1, 0, 0)], ['', datetime.datetime(2014, 2, 2, 0, 0)]]

然后,您還可以使用itemgetter

>>> from operator import itemgetter
>>> b.sort(key=itemgetter(-1))
>>> b
[['', datetime.datetime(2014, 1, 27, 0, 0)], ['', datetime.datetime(2014, 1, 28, 0, 0)], ['', datetime.datetime(2014, 1, 29, 0, 0)], ['', datetime.datetime(2014, 1, 30, 0, 0)], ['', datetime.datetime(2014, 1, 31, 0, 0)], ['', datetime.datetime(2014, 2, 1, 0, 0)], ['', datetime.datetime(2014, 2, 2, 0, 0)]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM