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

如何先按x升序、再按y降序排序Python字典列表?

实现x升序、y降序的排序方法

当然有办法啦!最简洁高效的方式是利用排序键的特性——对y的值取负数,这样在升序排序时,负数的升序就等价于原y值的降序。结合x的升序需求,直接构造对应的键函数就行。

核心实现代码

a = [{"x" : 5 , "y" : 7} , {"x" : 4 , "y" : 3} , {"x" : 4 , "y" : 7}]
sorted_result = sorted(a, key=lambda k: (k['x'], -k['y']))
print(sorted_result)
# 输出: [{"x": 4, "y": 7}, {"x": 4, "y": 3}, {"x": 5, "y": 7}]

原理说明

  • 对于x,我们直接用原始值,这样排序时会按升序排列;
  • 对于y,我们取其相反数-k['y'],当按升序排序这个负数时,原本大的y值对应的负数更小,会排在前面,也就实现了y的降序效果。

备选方案:自定义比较函数(效率较低,仅作参考)

如果你更习惯用自定义逻辑来做比较,可以借助functools.cmp_to_key把比较函数转换成排序键:

from functools import cmp_to_key

def compare(item1, item2):
    # 先按x升序:x小的排前面
    if item1['x'] != item2['x']:
        return item1['x'] - item2['x']
    # x相等时按y降序:y大的排前面
    else:
        return item2['y'] - item1['y']

sorted_result = sorted(a, key=cmp_to_key(compare))

不过这种方法的效率比键函数低,因为每次排序都要调用比较函数,而键函数只需要计算一次键值,所以优先推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:02:46