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

如何按元组末元素降序、次元素排序值为元组的Python字典?

按元组多条件排序字典的实现方法

要实现你需要的排序规则(按元组最后一个元素非递增排序,相同则按元组第二个元素非递增排序),只需要修改sorted函数的key参数,让它包含两个排序条件即可。

解决方案代码

capacity = {
    'one': (57000, 3100, 0.12903225806451613),
    'two': (52911, 2400, 0.125),
    'three': (48200, 2400, 0.125),
    'four': (48200, 2480, 0.125),
    'five': (11464, 1200, 0.20833333333333334),
    'six': (44000, 1172, 0.21331058020477817),
    'seven': (42000, 1172, 0.21331058020477817)
}

# 写法1:通过取负数实现降序排序
sorted_capacity = {k: v for k, v in sorted(
    capacity.items(),
    key=lambda x: (-x[1][2], -x[1][1])
)}

# 写法2:使用reverse=True反转排序规则
# sorted_capacity = {k: v for k, v in sorted(
#     capacity.items(),
#     key=lambda x: (x[1][2], x[1][1]),
#     reverse=True
# )}

print(sorted_capacity)

输出结果

{'six': (44000, 1172, 0.21331058020477817),
 'seven': (42000, 1172, 0.21331058020477817),
 'five': (11464, 1200, 0.20833333333333334),
 'one': (57000, 3100, 0.12903225806451613),
 'four': (48200, 2480, 0.125),
 'two': (52911, 2400, 0.125),
 'three': (48200, 2400, 0.125)}

原理说明

Python的sorted函数支持通过元组形式的key实现多条件排序:

  1. 排序时会优先比较元组的第一个元素,当第一个元素相同时,再比较第二个元素。
  2. 写法1中,我们对元组的第三个元素和第二个元素取负数,利用默认的升序排序规则,让原数值更大的元素排在前面,实现降序效果。
  3. 写法2中,直接使用原数值作为key,再通过reverse=True将整个排序规则反转,同样能实现先按第三个元素降序、再按第二个元素降序的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:57:21