python - 按每个元素的子串的键对列表列表进行排序

时间:2015-01-07 16:01:40

标签: python list sorting date

我有一个这样的清单:

[('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,第一个解决方案适用于一个简单的列表,但我找不到将它用于列表列表的方法。

我该怎么办?感谢。

3 个答案:

答案 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)