根据子列表的内容对元素进行排序?

时间:2014-08-14 08:15:45

标签: python sorting sublist

例如,在python中你有一个这样的列表:

test = [[0, 'cde', 'efg'], [0, 'ac', 'dfg'], [0, 'ab', 'dfg'], [0, 'efg', 'cde']]

并且您希望按字母顺序对此列表中的第2和第3个元素(即索引1和2)进行排序,即新列表:

test = [[0, 'cde', 'efg'], [0, 'ab', 'dfg'], [0, 'ac', 'dfg'], [0, 'efg', 'cde']]

如何才能实现这一目标?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

res = test[:1] + sorted(test[1:3]) + test[3:]

答案 1 :(得分:0)

如果您想根据2 nd 和3 rd 元素进行排序,请使用operator.itemgetter

from operator import itemgetter
test = [[0, 'cde', 'efg'], [0, 'ac', 'dfg'], [0, 'ab', 'dfg'], [0, 'efg', 'cde']]
print sorted(test, key=itemgetter(1,2))

输出

[[0, 'ab', 'dfg'], [0, 'ac', 'dfg'], [0, 'cde', 'efg'], [0, 'efg', 'cde']]

答案 2 :(得分:0)

test = [[0, 'cde', 'efg'], [0, 'ac', 'dfg'], [0, 'ab', 'dfg'], [0, 'efg', 'cde']]
sorted(test, key = lambda x: x[1:])


In [109]: test = [[0, 'cde', 'efg'], [0, 'ac', 'dfg'], [0, 'ab', 'dfg'], [0, 'efg', 'cde']]

In [110]: sorted(test,key=lambda x: x[1:])
Out[110]: [[0, 'ab', 'dfg'], [0, 'ac', 'dfg'], [0, 'cde', 'efg'], [0, 'efg', 'cde']]

您可以使用test.sort(key = lambda x: x[1:])对列表进行排序,以避免在可能的情况下创建新列表。

相关问题