Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Itemgetter关于日期_Python_Date_Python 3.x - Fatal编程技术网

Python-Itemgetter关于日期

Python-Itemgetter关于日期,python,date,python-3.x,Python,Date,Python 3.x,输出: 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)) import datetime b=sorted(a,key=lambda x:datetime.d

输出:

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))
import datetime
b=sorted(a,key=lambda x:datetime.datetime.strptime(x[-1], '%d/%m/%Y'))
为什么itemgetter会产生这个结果


我知道在这个例子中,日期是按升序排列的,但如果不是,是否有一个函数可以简单地做到这一点?

日期存储为字符串,因此按字典顺序进行排序。如果要将其排序为日期,应使用
datetime.strtime

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

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))
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']]

你在那里没有约会。您的字符串恰好包含日期的字符串表示形式。因此,当您按字符串排序时,您使用的是标准

如果要按日期排序,实际上需要解释这些字符串。例如,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']]
然后还可以使用
itemgetter

>>> 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)]]