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

嵌套字典排序求助:按子字典值及子字典长度排序

解决嵌套字典的排序问题

嘿,作为Python新手碰到嵌套字典排序确实容易懵,不过用sorted()结合lambda完全能搞定!我来一步步给你拆解怎么做。

需求拆解

你需要的排序规则是:

  1. 第一优先级:按玩家的分数降序排列(分数高的在前)
  2. 第二优先级:如果分数相同,按对应团队的玩家总数降序排列(玩家多的团队里的成员在前)

实现步骤

我们可以分三步来做:

  1. 先统计每个团队的玩家总数,方便后续排序时调用
  2. 把嵌套字典里的所有玩家信息拆成扁平的列表(每个元素包含团队名、玩家名、分数)
  3. 用sorted()函数,通过lambda指定排序的优先级

代码示例

def sort_nested_dict(nested_dict):
    # 第一步:统计每个团队的玩家数量
    team_player_count = {team: len(players) for team, players in nested_dict.items()}
    
    # 第二步:把所有玩家信息展开成列表
    all_players = []
    for team, players in nested_dict.items():
        for name, score in players.items():
            all_players.append( (team, name, score) )
    
    # 第三步:按规则排序
    # 排序key:(-分数, -团队玩家数),负号实现降序效果
    sorted_players = sorted(all_players, key=lambda x: (-x[2], -team_player_count[x[0]]))
    
    # 按要求格式输出
    for team, name, score in sorted_players:
        print(f"({team}) {name} <-> {score}")

# 测试示例1
print("示例1输出:")
example1 = {'Red': {'Pesho': 2000}, 'Blue': {'Tosho': 1000}, 'Green': {'Gosho': 1000}, 'Yellow': {'Sasho': 4500}, 'Stamat': {'Prakasho': 1000}}
sort_nested_dict(example1)

# 测试示例2
print("\n示例2输出:")
example2 = {'Red': {'Pesho': 10000}, 'Blue': {'Pesho': 10000, 'Gosho': 10000}}
sort_nested_dict(example2)

代码解释

  • team_player_count:用字典推导式快速算出每个团队的玩家数,比如示例2里的Blue对应2,Red对应1
  • all_players:把嵌套结构拆成(团队名, 玩家名, 分数)的元组列表,让排序操作更直观
  • sorted()里的lambda:-x[2]表示按分数降序(默认升序,加负号反转顺序),-team_player_count[x[0]]表示分数相同时,按团队玩家数降序排列,这也是示例2里Blue的玩家排在Red前面的原因

运行这段代码,输出结果就和你给出的完全一致啦!如果之后遇到分数和团队玩家数都相同的情况,还可以在lambda里加第三个排序条件,比如玩家名的字母顺序(x[1]),让排序逻辑更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:44:05