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

如何按三个指定条件对Python字典列表进行正确排序

问题分析与修改方案

你现有代码存在两个核心错误导致无法得到预期结果:

  • 布尔排序逻辑颠倒:Python中True等价于1、False等价于0,默认升序排序时值更小的排在前面。你原逻辑中直接使用p["weight"]==75作为排序键,会让体重不等于75的条目得到更小的排序值,反而排在符合要求的条目前面,完全和需求相反。
  • 缺失同优先级下的姓名排序规则:你期望身高差相同、体重条件、体重值都一致的条目按姓名升序排列,仅提前按姓名排序的写法无效——后续执行的排序会优先使用新的排序键,只有新键完全一致的条目才会保留之前的相对顺序,直接把姓名字段加入排序键元组更可靠。
修正后代码
def get_ordered_list(persons):
    persons.sort(key = lambda p: (abs(p["height"] - 180), p["weight"]!=75, p["weight"], p["name"]))
    return persons

排序键元组优先级从左到右依次降低:

  1. 第一优先级:abs(p["height"] - 180) 按和180的身高差升序排列,越接近180越靠前
  2. 第二优先级:p["weight"]!=75 体重等于75时该值为0,不等于75时为1,所以体重75的条目优先靠前
  3. 第三优先级:p["weight"] 按体重升序排列
  4. 第四优先级:p["name"] 前面三个条件都相同时,按姓名字典序升序排列

使用你给出的示例输入运行上述代码,输出结果和预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:45:03