这里的
python问题:
我正在运行一个排序函数来按日期排序一些数据,并得到不正确的输出.我准备了我的代码的简短版本,其中包含一些示例数据以显示错误(完整代码无趣,完整的实际数据是专有的).
这是代码:
import operator
mylist = [['CustomerID_12345', 'TransactionID_1001', '12/31/2012'],
['CustomerID_12345', 'TransactionID_1002', '3/12/2013'],
['CustomerID_12345', 'TransactionID_1003', '1/7/2013'],
['CustomerID_12345', 'TransactionID_1004', '12/31/2012']]
sorted_list = sorted(mylist, key=operator.itemgetter(2))
print type(mylist)
print len(mylist)
for i in mylist:
print i
print "" # just for a line break for convenience
for i in sorted_list:
print i
输出是:
4
['CustomerID_12345', 'TransactionID_1001', '12/31/2012']
['CustomerID_12345', 'TransactionID_1002', '3/12/2013']
['CustomerID_12345', 'TransactionID_1003', '1/7/2013']
['CustomerID_12345', 'TransactionID_1004', '12/31/2012']
['CustomerID_12345', 'TransactionID_1003', '1/7/2013']
['CustomerID_12345', 'TransactionID_1001', '12/31/2012']
['CustomerID_12345', 'TransactionID_1004', '12/31/2012']
['CustomerID_12345', 'TransactionID_1002', '3/12/2013']
第一个块是原始数据,第二个块是输出.由于我尝试按日期排序,因此很容易看出排序无法正常工作.
有人可以帮助解释错误并建议如何纠正它吗?
提前致谢 :)
这是因为python将它们视为字符串而不是日期.
这是因为’1’小于’2′,小于’3′
‘/’也小于数字,所以有你的问题.
而是尝试将它们作为日期进行比较,使用datetime模块.
这是一个示例:
from datetime import datetime
your_date = datetime.strptime('1/1/2013', "%m/%d/%Y")
my_date = datetime.strptime('12/3/2011', "%m/%d/%Y")
print your_date > my_date
[Out]: True