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

如何对含重复total_points的OrderedDict条目进行二次排序?

解决方案

执行顺序:先添加平均分字段,再执行排序

排序需要用到新的「比赛位置平均分」字段,所以必须先给所有选手计算并添加该字段,再基于total_points+平均分的组合条件重新排序——原排序只考虑了单一维度,二次调整容易破坏整体降序逻辑,不如一次性用多维度条件排序更可靠。

具体实现代码示例

假设你的选手数据是键为选手ID、值为信息字典的OrderedDict,代码逻辑如下:

from collections import OrderedDict

# 示例原数据(爬虫生成并已按total_points降序的OrderedDict)
players = OrderedDict([
    ("player_a", {"total_points": 120, "position_scores": [88, 92, 90]}),
    ("player_b", {"total_points": 120, "position_scores": [95, 93, 94]}),
    ("player_c", {"total_points": 110, "position_scores": [85, 87]}),
    ("player_d", {"total_points": 120, "position_scores": [86, 89, 88]})
])

# 1. 给每个选手添加比赛位置平均分字段
for player_id, details in players.items():
    # 计算平均分,处理无位置得分的边界情况
    pos_scores = details.get("position_scores", [])
    details["position_avg"] = sum(pos_scores) / len(pos_scores) if pos_scores else 0.0

# 2. 多维度排序:先按total_points降序,相同则按position_avg降序
sorted_players = OrderedDict(
    sorted(players.items(), 
           key=lambda item: (-item[1]["total_points"], -item[1]["position_avg"])
    )
)

关键逻辑说明

  • 排序的key用元组(-total_points, -position_avg),负号实现降序:先比较total_points,值大的在前;当total_points相同时,再比较position_avg,值大的在前。
  • 如果需要升序排列平均分,去掉对应负号即可。
  • 原有的OrderedDict排序结果可以直接覆盖,因为新排序已经包含了原排序逻辑,且补充了平均分维度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:51:09