如何根据列表中的键对元组列表进行排序?

Mal*_*lgi 2 python sorting tuples list-comprehension list

我想基于许多键对元组列表进行排序.例如,我有这个元组列表:

list_t = [(1, 3, 5, 6, 9, 10), (1, 2, 3, 4, 5, 61), (1, 2, 3, 0, 9, 81), (1, 2, 6, 7, 9, 54), (1, 3, 5, 6, 12, 43)]
Run Code Online (Sandbox Code Playgroud)

有一次我想通过元组的第一,第二,第三和第五元素对它进行排序:

keys = [0, 1, 2, 4]
list_t_sorted = [(1, 2, 3, 4, 5, 61), (1, 2, 3, 0, 9, 81), (1, 2, 6, 7, 9, 54), (1, 3, 5, 6, 9, 10), (1, 3, 5, 6, 12, 43)]
Run Code Online (Sandbox Code Playgroud)

另一次我需要通过元组的第三个元素对它进行排序:

keys = [2]
list_t_sorted = [(1, 2, 3, 4, 5, 61), (1, 2, 3, 0, 9, 81), (1, 3, 5, 6, 9, 10), (1, 3, 5, 6, 12, 43), (1, 2, 6, 7, 9, 54)]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试了这段代码,但它没有返回预期的结果:

def sort_list(keys, list_t):
    return sorted(list_t, key=lambda l: (l[x] for x in keys))
Run Code Online (Sandbox Code Playgroud)

例如,对于keys = [0,1,2,4],它返回[(1,3,5,6,9,10),(1,2,3,4,5,61),(1,3) ,5,6,12,43),(1,2,6,7,9,54),(1,2,3,0,9,81)],它们不是基于键排序的.

有谁能够帮我?谢谢!

mic*_*ard 6

干得好.您可以operator.itemgetter 在文档中阅读更多相关信息.

import operator
list_t = [(1, 3, 5, 6, 9, 10), (1, 2, 3, 4, 5, 61), (1, 2, 3, 0, 9, 81), (1, 2, 6, 7, 9, 54), (1, 3, 5, 6, 12, 43)]
keys = [0, 1, 2, 4]
sorted(list_t, key=operator.itemgetter(*keys))
Run Code Online (Sandbox Code Playgroud)

输出:

[(1, 2, 3, 4, 5, 61),
 (1, 2, 3, 0, 9, 81),
 (1, 2, 6, 7, 9, 54),
 (1, 3, 5, 6, 9, 10),
 (1, 3, 5, 6, 12, 43)]
Run Code Online (Sandbox Code Playgroud)