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

如何按PTS值对嵌套字典中各分区球队字典降序排序?

冰球队分区字典按PTS排序无效问题解决

我在处理存储冰球队分区数据的嵌套字典时,遇到了排序不生效的问题。每个球队对应的值是包含PTS(积分)和VRP统计项的字典,需求是将每个分区内的球队按PTS值降序独立排序,但运行代码后原字典没有任何排序变化,无法得到预期结果。

原代码

dic = {
            "Atlantic": {
                "TeamA": {"PTS": 80, "VRP": 35},
                "TeamB": {"PTS": 65, "VRP": 31},
                "TeamC": {"PTS": 80, "VRP": 30}
            },
            "Metropolitan": {
                "TeamD": {"PTS": 60, "VRP": 29},
                "TeamE": {"PTS": 65, "VRP": 28}
            }
        }

def ranking_sorting(ranking):
    for division in ranking.values():
        division = dict(sorted(division.items(), key=lambda x:x[1]["PTS"], reverse = True))

ranking_sorting(dic)

print(dic)

问题原因

核心问题是循环中给division变量重新赋值了排序后的新字典,但这个操作并没有修改原字典中的分区数据——division只是原分区字典的一个引用副本,重新赋值后它指向了新的字典对象,和原字典的分区条目没有任何关联,因此原字典不会被修改。

修正方案

方案1:直接修改原字典

遍历原字典的分区名称,将每个分区替换为排序后的新字典,直接修改原数据:

dic = {
    "Atlantic": {
        "TeamA": {"PTS": 80, "VRP": 35},
        "TeamB": {"PTS": 65, "VRP": 31},
        "TeamC": {"PTS": 80, "VRP": 30}
    },
    "Metropolitan": {
        "TeamD": {"PTS": 60, "VRP": 29},
        "TeamE": {"PTS": 65, "VRP": 28}
    }
}

def ranking_sorting(ranking):
    # 遍历每个分区的名称,直接修改原字典中的对应分区
    for div_name in ranking:
        # 按PTS降序排序,PTS相同时按VRP降序(匹配预期结果的顺序)
        ranking[div_name] = dict(sorted(
            ranking[div_name].items(), 
            key=lambda x: (-x[1]["PTS"], -x[1]["VRP"])
        ))

ranking_sorting(dic)
print(dic)

方案2:返回新的排序后字典(不修改原数据)

如果需要保留原始数据,可以创建并返回一个新的排序后的字典:

dic = {
    "Atlantic": {
        "TeamA": {"PTS": 80, "VRP": 35},
        "TeamB": {"PTS": 65, "VRP": 31},
        "TeamC": {"PTS": 80, "VRP": 30}
    },
    "Metropolitan": {
        "TeamD": {"PTS": 60, "VRP": 29},
        "TeamE": {"PTS": 65, "VRP": 28}
    }
}

def ranking_sorting(ranking):
    sorted_ranking = {}
    for div_name, teams in ranking.items():
        # 对当前分区的球队排序
        sorted_teams = dict(sorted(
            teams.items(), 
            key=lambda x: (-x[1]["PTS"], -x[1]["VRP"])
        ))
        sorted_ranking[div_name] = sorted_teams
    return sorted_ranking

sorted_dic = ranking_sorting(dic)
print(sorted_dic)

预期输出结果

两种方案都能得到符合需求的排序结果:

{
    "Atlantic": {
        "TeamA": {"PTS": 80, "VRP": 35},
        "TeamC": {"PTS": 80, "VRP": 30},
        "TeamB": {"PTS": 65, "VRP": 31}
    },
    "Metropolitan": {
        "TeamE": {"PTS": 65, "VRP": 28},
        "TeamD": {"PTS": 60, "VRP": 29}
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:14:55