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

Python中多约束下按tuple值对dict排序的实现方法

字典按元组元素排序的解决方案

先给出基础示例字典:

hmap = {1: (80, 40, 120), 2: (60, 20, 80), 3: (80, 50, 130), 4: (60, 90, 150), 5: (70, 90, 160), 6: (70, 80, 150)}

1. 按元组的第二个或第三个元素排序

利用sorted函数的key参数指定元组的特定索引(元组索引从0开始,第二个元素对应索引1,第三个对应索引2),结合reverse=True实现逆序排序:

  • 按元组第二个元素逆序排序:
mm_second = {k: v for k, v in sorted(hmap.items(), key=lambda x: x[1][1], reverse=True)}

输出结果:

{4: (60, 90, 150), 5: (70, 90, 160), 6: (70, 80, 150), 3: (80, 50, 130), 1: (80, 40, 120), 2: (60, 20, 80)}
  • 按元组第三个元素逆序排序:
mm_third = {k: v for k, v in sorted(hmap.items(), key=lambda x: x[1][2], reverse=True)}

输出结果:

{5: (70, 90, 160), 4: (60, 90, 150), 6: (70, 80, 150), 3: (80, 50, 130), 1: (80, 40, 120), 2: (60, 20, 80)}

2. 按元组第二个元素排序,平局时按键升序排序

让key返回一个元组:先对第二个元素取负实现逆序(避免reverse=True影响后续的键排序逻辑),再按键的升序排列。

示例代码(按第二个元素逆序,平局按键升序):

mm_second_key = {k: v for k, v in sorted(hmap.items(), key=lambda x: (-x[1][1], x[0]))}

输出结果:

{4: (60, 90, 150), 5: (70, 90, 160), 6: (70, 80, 150), 3: (80, 50, 130), 1: (80, 40, 120), 2: (60, 20, 80)}

如果需要按第二个元素升序,直接将key改为lambda x: (x[1][1], x[0])即可。


3. 按元组第一个元素逆序,平局时按键升序排序

针对指定小字典示例:

hmap_small = {1: (80, 40, 120), 2: (60, 20, 80), 3: (80, 50, 130)}

同样用元组作为key,先对第一个元素取负实现逆序,再按键升序排列:

mm_first_key = {k: v for k, v in sorted(hmap_small.items(), key=lambda x: (-x[1][0], x[0]))}

输出结果:

{1: (80, 40, 120), 3: (80, 50, 130), 2: (60, 20, 80)}

这里键1和3的元组第一个元素均为80,最终按按键升序排列,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:54:18