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

如何按值降序、键升序对Python OrderedDict进行排序?

OrderedDict 排序:值降序、键升序的实现

需求说明

需要对OrderedDict执行排序,规则为:

  • 优先按值降序排列
  • 当值相同时,按键升序排列

原始OrderedDict:

from collections import OrderedDict
A = OrderedDict({'a': 7, 'h': 6, 'c': 11, 'cc': 11, 'm': 9, 'n': 11, 'g': 7, 'b': 5.0, 'k': 11})

预期排序结果:

A = OrderedDict({'c': 11, 'cc': 11, 'k': 11, 'n': 11, 'm': 9, 'a': 7, 'g': 7, 'h': 6, 'b': 5.0})

错误尝试及问题分析

尝试了以下代码:

OrderedDict(sorted(A.items(), key=lambda x: (x[1],x[0]),reverse=True))

得到的结果不符合预期:

OrderedDict({'n': 11, 'k': 11, 'cc': 11, 'c': 11, 'm': 9, 'g': 7, 'a': 7, 'h': 6, 'b': 5.0})

问题出在reverse=True会对整个排序键元组(x[1], x[0])进行反转,虽然实现了值的降序,但同时也把键的排序逻辑反转成了降序,导致值相同时键是从大到小排列,和需求的键升序相反。

正确实现代码

OrderedDict(sorted(A.items(), key=lambda x: (-x[1], x[0]), reverse=False))

逻辑解释

  • 对值取负数-x[1]:这样在默认升序排序时,数值大的负数更小,会排在前面,等价于原数值的降序排列
  • 键保持原顺序x[0]:当值对应的负数相同时(即原数值相等),直接按键的升序排列
  • reverse=False可以省略,因为sorted默认就是升序排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:17:11