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

如何用Python按列表内元组的两个值进行优先级排序?

Python按自定义元组规则排序列表

需求明确

你需要对以下结构的列表排序:

my_list = [['A', (3,4)], ['A2', (6,11)], ['U1', (2,9)], ['P9', (1,9)], ['X', (10,4)]]

每个元素是[标识字符串, (x坐标, y坐标)],排序规则为:

  1. 优先按y坐标降序排列(对应图像从上到下的顺序,y值越大越靠上)
  2. 当y坐标相同时,按x坐标降序排列

实现方法

Python的sorted()函数或列表的.sort()方法都能轻松实现,核心是通过key参数定义排序依据,利用负号将降序需求转换为默认的升序排序逻辑。

方法1:返回新排序后的列表(不修改原列表)

my_list = [['A', (3,4)], ['A2', (6,11)], ['U1', (2,9)], ['P9', (1,9)], ['X', (10,4)]]
sorted_list = sorted(my_list, key=lambda item: (-item[1][1], -item[1][0]))
print(sorted_list)

方法2:直接修改原列表

my_list = [['A', (3,4)], ['A2', (6,11)], ['U1', (2,9)], ['P9', (1,9)], ['X', (10,4)]]
my_list.sort(key=lambda item: (-item[1][1], -item[1][0]))
print(my_list)

代码解释

  • lambda item: (-item[1][1], -item[1][0]) 是匿名函数,为每个列表元素生成排序用的键:
    • item[1][1] 取元素中的y坐标,加负号后,y值越大的元素键值越小,在默认升序排序中会排在前面,等价于y降序
    • 当y坐标相同时,再比较-item[1][0](x坐标的负值),x值越大的元素键值越小,排在前面,等价于x降序

输出结果

两种方法都会得到你需要的排序结果:

[['A2', (6, 11)], ['U1', (2, 9)], ['P9', (1, 9)], ['X', (10, 4)], ['A', (3, 4)]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:01:18