对unix时间戳值列表进行排序

时间:2013-12-11 06:26:00

标签: python sorting

给出UNIX时间戳值列表:

l = ['1260633600', '1256993100', '1273255200', '1253450700']

我需要对列表进行排序。

from datetime import datetime
def humanize_unixtime(unix_time):
    time = datetime.fromtimestamp(int(unix_time)).strftime('%d-%m-%Y %H.%M')
    return time 

lsorted = sorted(l, key=lambda x: humanize_unixtime(x), reverse=True)
print [humanize_unixtime(i) for i in lsorted]

当我运行这个时,我得到['31-10-2009 13.45', '20-09-2009 14.45', '12-12-2009 17.00', '07-05-2010 20.00'],它根本没有排序。你能看出什么是错的吗?

3 个答案:

答案 0 :(得分:3)

您按人性化输出(字符串)排序,而不是按时间排序。请注意,第一个值以'3'开头,第二个值以'2'开头,第三个值以'1'开头,这正是您使用reverse=True对字符串进行排序时所期望的。

将您的key=lambda ...更改为key=int,这一切都应该有效。

答案 1 :(得分:0)

使用此

from datetime import datetime
l = ['1260633600', '1256993100', '1273255200', '1253450700']
def humanize_unixtime(unix_time):
    time = datetime.fromtimestamp(int(unix_time)).strftime('%d-%m-%Y %H.%M')
    return time

lsorted = sorted(l, reverse=True)
print lsorted
print [humanize_unixtime(i) for i in lsorted]

这里使用 lsorted = sorted(l, reverse=True)代替

lsorted = sorted(l, key=lambda x: humanize_unixtime(x), reverse=True)

您将获得输出

['07-05-2010 23.30', '12-12-2009 21.30', '31-10-2009 18.15', '20-09-2009 18.15']

完美排序

答案 2 :(得分:0)

在 lambda 函数中将 string 类型转换为 int,因为 unix 纪元时间遵循增量顺序。

from datetime import datetime
l = ['1260633600', '1256993100', '1273255200', '1253450700']
def humanize_unixtime(unix_time):
    time = datetime.fromtimestamp(int(unix_time)).strftime('%d-%m-%Y %H.%M')
    return time

lsorted = sorted(l,key=lambda s: int(s), reverse=True)
print lsorted
print [humanize_unixtime(i) for i in lsorted]