python - 通过作为每个元素的子字符串的键对列表列表进行排序

python - sorting a list of lists by a key that's substring of each element

我有一个这样的列表:

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

我该怎么办?谢谢。

我想如果您引用的解决方案如您所愿,以这种方式修改使用它应该是微不足道的:

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)
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")]   

使用日期时间对象:

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')]

您需要定义用于比较 2 个元素的键:

import time
def key(item):
    return time.strptime(item[0][-16:], "%d/%m/%y à %H:%M")

然后排序:

print sorted(my_list,key=key)