【发布时间】:2016-10-24 14:51:30
【问题描述】:
我想根据键的数量对元组列表进行排序。例如,我有这个元组列表:
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]
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)]
还有一次我需要按元组的第三个元素对其进行排序:
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)]
到目前为止,我尝试了这段代码,但它没有返回预期的结果:
def sort_list(keys, list_t):
return sorted(list_t, key=lambda l: (l[x] for x in 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)] 不按键排序。
有人可以帮助我吗?谢谢!
【问题讨论】:
-
你说它没有返回预期的结果。它返回什么?
-
基于键的未排序的元组列表。例如,对于 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)],不按key排序!
标签: python list sorting tuples list-comprehension