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

如何对defaultdict(list)的列表值排序?澄清排序结果的误解

问题解答

你的代码本身已经正确实现了按元组的第2、3个元素倒序排序的需求,下面拆解验证逻辑:

代码逻辑验证

先看你提供的完整代码:

from collections import defaultdict
d=defaultdict(list)
d['A']=[('a',20,30), ('b', 13, 1)]
d['B']=[('c',2,1), ('b', 3, 21)]
for k, v in d.items():
    d[k] = sorted(v, key=lambda tup: (tup[1], tup[2]), reverse=True)

print(d)

对'A'组的排序验证

'A'组的两个元组是('a',20,30)和('b',13,1):

  • 优先比较元组第2个元素:20 > 13,因此('a',20,30)自然排在前面,和输出结果一致
  • 只有当第2个元素相同时,才会继续比较第3个元素倒序,这里无需触发这一步

对'B'组的排序验证

'B'组的两个元组是('c',2,1)和('b',3,21):

  • 第2个元素3 > 2,所以('b',3,21)排在前面,和输出结果一致

你最初误以为结果应该是('a',30,20),是混淆了排序依据和修改元组元素顺序——你的代码是基于元组第2、3位的数值大小来排序,而非交换这两个位置的元素,所以原有代码的输出完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:30:53