使用给定函数按多个属性对列表进行排序

时间:2017-08-27 01:21:31

标签: python sorting

我是一个清单

[['12', '2017/6/10'],
['-2', '2017/5/10'],
['12', '2017/2/10']]

我需要按数字排序第一个元素,按时间排序(或使用给定的函数说明字符串的第二个字母)

4 个答案:

答案 0 :(得分:4)

这是你想要的吗?

from operator import itemgetter
LIST=[['12', '2017/6/10'],
['-2', '2017/5/10'],
['12', '2017/2/10']]
sorted(LIST, key=itemgetter(0,1))

Out[127]: [['-2', '2017/5/10'], ['12', '2017/2/10'], ['12', '2017/6/10']]

EDIT1抱歉将字符忽略为数字

sorted(LIST, key=lambda x: (int(x[0]), x[1]))

答案 1 :(得分:2)

from datetime import datetime

l = [['12', '2017/6/10'],
['-2', '2017/5/10'],
['12', '2017/2/10']]

l.sort(key=lambda x: (int(x[0]), datetime.strptime(x[1], "%Y/%m/%d")))

print(l)

请注意"%Y/%m/%d",看看是否符合您的日期格式。根据您使用的示例,不清楚月份或日期是否到位。

此外,int(x[0])可能会有一些修改,具体取决于您的数值有多长。

答案 2 :(得分:0)

使用此:

sorted(a, lambda x,y: x[0]<y[0] or x[0]==y[0] and x[1]<y[1]) 

如果你想在第二个键上做一个特殊的cmp函数,你可以定义一个自定义的cmp函数,例如

def cmp(sa,sb):
     return sa[3] < sb[3]

sorted(a, lambda x,y: x[0]<y[0] or x[0]==y[0] and cmp(x[1],y[1]))

答案 3 :(得分:-1)

我认为解决方案是使用'key'参数来定义排序键,使用'cmp'参数来定义函数