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

如何对元组列表按第二个元素降序排序且相同元素元组相邻?

元组列表按指定规则排序的实现方法

从给出的预期结果分析,排序逻辑分为两层:

  • 所有第二个元素相同的元组必须相邻;
  • 分组顺序为 A 组在前,B 组次之,C 组最后;
  • 每组内的元组按第一个元素降序排列。

以下是几种符合需求的实现方式:

方法1:基于字母升序的分组排序

直接使用Python内置的sorted()函数,通过key参数指定复合排序规则:

  1. 先按元组的第二个元素升序排列,确保同组元组相邻;
  2. 再按第一个元素的负值升序,等价于按第一个元素本身降序。
original_list = [(30, 'B'), (50, 'B'), (40, 'C'), (10, 'A'), (80, 'A'), (5, 'A')]
sorted_list = sorted(original_list, key=lambda x: (x[1], -x[0]))
print(sorted_list)
# 输出结果:[(80, 'A'), (10, 'A'), (5, 'A'), (50, 'B'), (30, 'B'), (40, 'C')]

方法2:基于出现次数降序的分组排序

如果分组顺序是由第二个元素的出现频率决定(A出现3次最多,B2次,C1次),可以借助collections.Counter统计次数后排序:

from collections import Counter

original_list = [(30, 'B'), (50, 'B'), (40, 'C'), (10, 'A'), (80, 'A'), (5, 'A')]
counts = Counter(item[1] for item in original_list)
# 排序规则:先按出现次数降序,再按字母升序,最后按第一个元素降序
sorted_list = sorted(original_list, key=lambda x: (-counts[x[1]], x[1], -x[0]))
print(sorted_list)
# 输出结果与预期一致

方法3:自定义元素优先级的降序排序

如果需要指定第二个元素的自定义降序顺序(比如强制A > B > C),可以为每个元素分配优先级值,再按优先级降序排序:

original_list = [(30, 'B'), (50, 'B'), (40, 'C'), (10, 'A'), (80, 'A'), (5, 'A')]
priority_map = {'A': 3, 'B': 2, 'C': 1}
sorted_list = sorted(original_list, key=lambda x: (-priority_map[x[1]], -x[0]))
print(sorted_list)
# 输出结果与预期一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:24:23