You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何对元组列表按元组第二个值排序并交换对应第一个值?

解决方法:用Python内置方法轻松实现

当然可以用Python的内置方法完成这个需求,完全不需要自己编写复杂的自定义函数,下面分步骤给你拆解实现方式:

步骤1:提取并排序所有字符串元素

首先,我们需要从原列表的元组中提取出所有的第二个元素(字符串),然后用内置的sorted()函数按字母顺序排序:

lst = [(1, "z"), (2, "a"), (3, "b")]
# 提取所有字符串并按字母升序排序
sorted_strings = sorted(t[1] for t in lst)

这里的t[1] for t in lst是生成器表达式,用来遍历原列表的每个元组并取出第二个元素;sorted()默认会对字符串按字母升序排序,正好匹配你的需求。

步骤2:重新配对元素

接下来,把原列表中每个元组的第一个元素,和排序后的字符串一一对应,组成新的元组列表:

result = [(lst[i][0], sorted_strings[i]) for i in range(len(lst))]

这里用列表推导式遍历索引,将原元组的第一个元素与排序后的字符串按位置配对。

完整代码示例

把上面的步骤整合起来,完整代码如下:

lst = [(1, "z"), (2, "a"), (3, "b")]
sorted_strings = sorted(t[1] for t in lst)
result = [(lst[i][0], sorted_strings[i]) for i in range(len(lst))]
print(result)  # 输出: [(1, 'a'), (2, 'b'), (3, 'z')]

更简洁的写法(可选)

如果你想让代码更紧凑,可以把两个步骤合并成一行,用zip()函数完成配对:

lst = [(1, "z"), (2, "a"), (3, "b")]
result = [(num, s) for num, s in zip([t[0] for t in lst], sorted(t[1] for t in lst))]

效果和之前的代码完全一致,只是写法更简洁。


内容的提问来源于stack exchange,提问作者George Liontos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:11:43