按日期(字符串和日期时间)列出的订单列表


import csv,operator
from datetime import datetime
li = [['name','01/03/2012','job'],
      ['name','02/05/2013','job'],
      ['name','03/08/2014','job']]

排序方法:

sorted(li,key=lambda x:datetime.strptime(row[1],'%d/%m/%Y'), reverse=True)

输出:

没有

错误,但只是没有订购

获取方法:

for x in range(1,len(li)):
    li[x][6]=datetime.strptime(li[x][6],'%d/%m/%Y')
li.sort(key=operator.itemgetter(6))

输出:

Traceback (most recent call last):
  File "U:/rmarshall/Work For Staff/ROB/_Python/__Python Projects Code/April Signed Terms.py", line 35, in <module>
    li.sort(key=operator.itemgetter(6))
TypeError: unorderable types: datetime.datetime() < str()

有人可以提供按日期排序列表的示例。 出于教育目的,我将欣赏排序方法和itemgetter方法的示例,并进行比较效率。

此外,由于itemgetter

方法上的错误,itemgetter根本无法处理日期时间对象。

注意:我认为在这个例子中,升序或降序并不重要,因为它可以用reverse=True简单地翻转。

这应该有效。

print(sorted(li, key=lambda x: datetime.strptime(x[1], '%d/%m/%Y'), reverse=True))

您在 lamba 中使用了row,这在以前可能已经定义过,但永远不会改变。

我在这里看不到使用itemgetter的方法。老实说,有办法,但看起来并不好。

key_function = lambda x: datetime.strptime(itemgetter(1)(x), '%d/%m/%Y') 
print(sorted(li, key=key_function, reverse=True))

以下作品:

>>> sorted(li, key=lambda x: datetime.strptime(x[1], "%d/%m/%Y"), reverse=True)
[['name', '03/08/2014', 'job'], ['name', '02/05/2013', 'job'], ['name', '01/03/2
012', 'job']]

使用sorted()的问题在于您尝试从row[1]创建日期时间,但这不起作用。将其更改为您创建的lambda,如我上面所示。

您很可能在前面的某处定义了row变量,这就是为什么它不会引发错误的原因。但是,如果我运行以下内容:

>>> sorted(li,key=lambda x:datetime.strptime(row[1],'%d/%m/%Y'), reverse=True)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 1, in <lambda>
NameError: global name 'row' is not defined

下面是一个带有itemgetter的示例:

>>> sorted(l, key=itemgetter(1))
[['name', '01/03/2012', 'job'], ['name', '02/05/2013', 'job'], ['name', '03/08/2014', 'job']]

在您的情况下,它可以工作,因为您的日期字符串格式正确。将它们转换为日期时间对象可能仍然是谨慎的。

你必须将str转换为datetime,因为sorted,无法比较datetimestr

datetime.strptime 用于将str转换为datetime对象。

您可以使用list.sort对同一列表进行排序。

In [43]: li.sort(key=lambda x: datetime.strptime(x[1], "%d/%m/%Y"))
In [44]: li
Out[44]:
[['name', '01/03/2012', 'job'],
 ['name', '02/05/2013', 'job'],
 ['name', '03/08/2014', 'job']]

相关内容

  • 没有找到相关文章

最新更新