python - 对列表进行排序不会产生正确的结果

标签 python sorting operator-keyword

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/

相关文章:

c++ - 在函数中获取排序数组和值并将该值放在正确的位置

c# - 如何调用 == 运算符来调用 child 的实现?

c++重载运算符<<以插入更多对象

c - while 循环中运算符的工作(C 编程)

python - 在夹层指标变量之间对 Pandas DataFrame 行进行高效分区

python - 在 Python 中使用多个条目格式化字典的正确方法

python - 尝试将字典中的值分配给结构环境设置

Python 算法挑战?

Swift 2.0 : Type of Expression is ambiguous without more context? 就地排序

java - 如何合并N排序两个文本文件