给出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']
,它根本没有排序。你能看出什么是错的吗?
答案 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]