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
输出是:
<type 'list'>
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']
第一 block 是原始数据,第二 block 是输出。由于我尝试按日期排序,因此很容易看出排序不正常。
有人可以帮助解释错误并建议如何更正吗? 提前致谢:)
最佳答案
这是因为 python 将它们视为字符串而不是日期。
这是因为 '1' 小于 '2' 而 '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
关于python - 对列表进行排序不会产生正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22804925/