Python中元组/元组值的排序和交换

Python中元组/元组值的排序和交换,python,list,sorting,tuples,Python,List,Sorting,Tuples,我在Python中有一个元组列表,我想根据元组的第二个值(这是一个字符串,所以我想按字母顺序排序)对它们进行排序,并交换元组的第一个值。例如,假设我们有一些列表: lst = [(1, "z"), (2, "a"), (3, "b")] 我希望最终结果如下: result = [(1, "a"), (2, "b"), (3, "z")] 这是否可以通过内置方法实现,或者我必须编写自己的函数?您可以使用zip: lst = [(1, "z"), (2, "a"), (3, "b")] sort

我在Python中有一个元组列表,我想根据元组的第二个值(这是一个字符串,所以我想按字母顺序排序)对它们进行排序,并交换元组的第一个值。例如,假设我们有一些列表:

lst = [(1, "z"), (2, "a"), (3, "b")]
我希望最终结果如下:

result = [(1, "a"), (2, "b"), (3, "z")]

这是否可以通过内置方法实现,或者我必须编写自己的函数?

您可以使用
zip

lst = [(1, "z"), (2, "a"), (3, "b")]
sort_l = [(a, c) for [a,_ ], c in zip(lst, sorted(b for _, b in lst))]
输出:

[(1, 'a'), (2, 'b'), (3, 'z')]

以下是一个功能解决方案:

from operator import itemgetter

lst = [(1, "z"), (2, "a"), (3, "b")]

res = list(zip(map(itemgetter(0), lst), sorted(map(itemgetter(1), lst))))

print(res)

[(1, 'a'), (2, 'b'), (3, 'z')]

注意:不应使用内置变量命名:使用
lst
而不是
list

使用旧的
zip(*lst)
转置技巧将列表一分为二,然后将第二个列表和它们重新排序在一起:

lst = [(1, "z"), (2, "a"), (3, "b")]

lst1, lst2 = zip(*lst)
result = list(zip(lst1, sorted(lst2)))

# lst1: (1, 2, 3)
# lst2: ('z', 'a', 'b')
# result: [(1, 'a'), (2, 'b'), (3, 'z')]

这不是一行,但如果您愿意,可以尝试:

lst = [(1, "z"), (2, "a"), (3, "b")]

first=[]
second=[]

for i,j in lst:
    first.append(i)
    second.append(j)

print(list(zip(sorted(second),first)))