我有一个这样的清单:
[('Cat\nDiff. le 07/01/15 à 11:00', var1, var2),
('Dog\nDiff. le 06/01/15 à 10:55', var3, var4),
('Fish\nDiff. le 03/01/15 à 09:15', var5, var6)]
我想按日期对此列表进行排序,以便:
[('Fish\nDiff. le 03/01/15 à 09:15', var5, var6),
('Dog\nDiff. le 06/01/15 à 10:55', var3, var4),
('Cat\nDiff. le 07/01/15 à 11:00', var1, var2)]
我已经看到了这个question,第一个解决方案适用于一个简单的列表,但我找不到将它用于列表列表的方法。
我该怎么办?感谢。
答案 0 :(得分:1)
l =[('Cat\nDiff. le 07/01/15 à 11:00',"var1", "var2"),
('Cat\nDiff. le 07/01/15 à 10:00',"var3","var4"),
('Dog\nDiff. le 06/01/15 à 10:55',"var5","var6"),
('Fish\nDiff. le 03/01/15 à 09:15',"var7","var8")]
使用datetime对象:
from datetime import datetime
def srt(x):
spl = x[0].split()
return datetime.strptime("{} {}".format(spl[3],spl[-1]),"%d/%m/%y %H:%M")
print(sorted(l,key=srt))
[('Fish\nDiff. le 03/01/15 \xc3\xa0 09:15', 'var7', 'var8'), ('Dog\nDiff. le 06/01/15 \xc3\xa0 10:55', 'var5', 'var6'), ('Cat\nDiff. le 07/01/15 \xc3\xa0 10:00', 'var3', 'var4'), ('Cat\nDiff. le 07/01/15 \xc3\xa0 11:00', 'var1', 'var2')]
答案 1 :(得分:1)
您需要定义用于比较2个元素的键:
import time
def key(item):
return time.strptime(item[0][-16:], "%d/%m/%y à %H:%M")
然后对其进行排序:
print sorted(my_list,key=key)
答案 2 :(得分:0)
我想如果您引用的解决方案按预期工作,那么使用它以这样的方式修改应该是微不足道的:
def myKeyFunc( subList ):
stuff, x, label = subList[0].partition(' x ')
return label
aList.sort( key= myKeyFunc )
我会谨慎对待这一点 - 似乎最好先将这些子列表清理为更友好的数据格式(即首先解析它们,然后将日期提取到子列表的其他可用项目中)例如,你可能想转此:
('Cat\nDiff. le 07/01/15 à 11:00', var1, var2)
进入这个:
('Cat\nDiff. le 07/01/15 à 11:00', var1, var2, DateObject)