我有一个列表列表:
[[12, 'tall', 'blue', 1],
[2, 'short', 'red', 9],
[4, 'tall', 'blue', 13]]
如果我想按一个元素排序,比如高/短元素,我可以通过s = sorted(s, key = itemgetter(1))来做。
如果我想按高/矮和颜色排序,我可以做两次排序,每个元素一次,但有没有更快的方法?
我有一个列表列表:
[[12, 'tall', 'blue', 1],
[2, 'short', 'red', 9],
[4, 'tall', 'blue', 13]]
如果我想按一个元素排序,比如高/短元素,我可以通过s = sorted(s, key = itemgetter(1))来做。
如果我想按高/矮和颜色排序,我可以做两次排序,每个元素一次,但有没有更快的方法?
当前回答
在列表之间有一个<操作符,例如:
[12, 'tall', 'blue', 1] < [4, 'tall', 'blue', 13]
将会给
False
其他回答
在列表之间有一个<操作符,例如:
[12, 'tall', 'blue', 1] < [4, 'tall', 'blue', 13]
将会给
False
键可以是返回元组的函数:
s = sorted(s, key = lambda x: (x[1], x[2]))
或者你可以使用itemgetter(更快,避免Python函数调用)实现同样的效果:
import operator
s = sorted(s, key = operator.itemgetter(1, 2))
注意这里你可以用sort而不是用sorted,然后重新赋值:
s.sort(key = operator.itemgetter(1, 2))
将列表的列表转换为元组列表,然后按多个字段对元组排序。
data=[[12, 'tall', 'blue', 1],[2, 'short', 'red', 9],[4, 'tall', 'blue', 13]]
data=[tuple(x) for x in data]
result = sorted(data, key = lambda x: (x[1], x[2]))
print(result)
输出:
[(2, 'short', 'red', 9), (12, 'tall', 'blue', 1), (4, 'tall', 'blue', 13)]
我不确定这是否是最python的方法… 我有一个元组列表,第一个需要按整数值降序排序,第二个需要按字母顺序排序。这需要反转整数排序,但不需要反转字母排序。这是我的解决方案:(顺便说一句,在考试中,我甚至不知道你可以“嵌套”排序函数)
a = [('Al', 2),('Bill', 1),('Carol', 2), ('Abel', 3), ('Zeke', 2), ('Chris', 1)]
b = sorted(sorted(a, key = lambda x : x[0]), key = lambda x : x[1], reverse = True)
print(b)
[('Abel', 3), ('Al', 2), ('Carol', 2), ('Zeke', 2), ('Bill', 1), ('Chris', 1)]
几年来,我想根据2个标准进行排序,并使用reverse=True。如果有人想知道怎么做,你可以把你的标准(函数)包装在括号里:
s = sorted(my_list, key=lambda i: ( criteria_1(i), criteria_2(i) ), reverse=True)