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

Python使用sorted()排序时如何保留重复排序键元素的原有顺序

问题根源

你当前的排序逻辑仅将到期日期作为排序key,Python的sorted()是稳定排序,当两个元素的key值相等时,会保留它们在原列表中的相对顺序。你示例中原列表a的位置早于e,相同日期下稳定排序会让a排在e前面,和你“到期日相同时先添加的商品更靠近列表末尾”的需求相反。

解决方案

可以直接用sorted()实现需求,只需要把元素的原始索引加入排序key的第二个维度即可:

  • 第一排序维度为到期日期,倒序排列保证日期越早的元素越靠后
  • 第二排序维度为元素在原列表中的索引,倒序排列保证相同日期下原始索引更小(先添加)的元素更靠后

实现代码

a = "20220202", "ACME Rice Ltd."
b = "20220315", "UniCORN & co."
c = "20771023", "RICE Unlimited"
d = "20220921", "G. P. a C."
e = "20220202", "Theorem's Rice"

lst = [a, b, c, d, e]

# 用enumerate获取每个元素的原始索引
lst = sorted(enumerate(lst), reverse=True, key=lambda x: (x[1][0], x[0]))
# 提取排序后的商品元素
lst = [item[1] for item in lst]

print(lst)
# 输出与预期一致:[c, d, b, e, a]

内容的提问来源于stack exchange,提问作者Petra Štěpánová

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:48:06