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

Python嵌套字典排序:如何按PF、Q值实现多级降序排名?

问题描述

我定义了一个嵌套字典,外层键为队伍名称,每个键对应的值是包含GIOCATE、PUNTI、Q、PF、PS字段的字典,示例如下:

{'Team1': {'GIOCATE': 4, 'PUNTI': 6, 'Q': 0.9, 'PF': 63, 'PS': 70}, 
 'Team2': {'GIOCATE': 3, 'PUNTI': 7, 'Q': 1.1, 'PF': 44, 'PS': 40}, 
 'Team3': {'GIOCATE': 3, 'PUNTI': 9, 'Q': 1.514, 'PF': 53, 'PS': 35}
}

我希望按以下规则排序:优先按PF值从高到低排列,若PF值相同则按Q值从高到低排列。作为Python新手,请求帮助实现该功能,预期输出格式如下:

Team7                      4    10    1.07     64    60
Team2                      3     9    1.51     53    35
Team1                      3     9    1.09     50    46
Team4                      4     8   0.935     58    62
Team5                      3     7     1.1     44    40
Team3                      3     7     1.0     44    44
Team8                      4     7   0.955     64    67
Team6                      4     6   0.964     54    56
解决方案

1. 对字典进行排序

使用Python内置的sorted()函数对字典的键值对排序,通过key参数指定双重排序规则:

  • 第一优先级:按PF字段降序排列,用-x[1]['PF']实现降序(默认排序为升序,取负数后等价于降序)
  • 第二优先级:当PF值相同时,按Q字段降序排列,同样用-x[1]['Q']实现

示例排序代码:

# 你的队伍数据字典
team_stats = {
    'Team1': {'GIOCATE': 4, 'PUNTI': 6, 'Q': 0.9, 'PF': 63, 'PS': 70},
    'Team2': {'GIOCATE': 3, 'PUNTI': 7, 'Q': 1.1, 'PF': 44, 'PS': 40},
    'Team3': {'GIOCATE': 3, 'PUNTI': 9, 'Q': 1.514, 'PF': 53, 'PS': 35},
    'Team4': {'GIOCATE': 4, 'PUNTI': 8, 'Q': 0.935, 'PF': 58, 'PS': 62},
    'Team5': {'GIOCATE': 3, 'PUNTI': 7, 'Q': 1.1, 'PF': 44, 'PS': 40},
    'Team6': {'GIOCATE': 4, 'PUNTI': 6, 'Q': 0.964, 'PF': 54, 'PS': 56},
    'Team7': {'GIOCATE': 4, 'PUNTI': 10, 'Q': 1.07, 'PF': 64, 'PS': 60},
    'Team8': {'GIOCATE': 4, 'PUNTI': 7, 'Q': 0.955, 'PF': 64, 'PS': 67}
}

# 执行排序
sorted_teams = sorted(team_stats.items(), key=lambda x: (-x[1]['PF'], -x[1]['Q']))

2. 格式化输出对齐

要得到预期的对齐格式,使用字符串格式化工具指定每个字段的宽度,确保内容整齐排列:

  • 队伍名称预留25个字符宽度(左对齐)
  • 数字字段分别指定宽度,保证列对齐

示例输出代码:

# 遍历排序后的队伍并输出
for team_name, stats in sorted_teams:
    print("{:<25} {:<5} {:<5} {:<7} {:<5} {:<5}".format(
        team_name,
        stats['GIOCATE'],
        stats['PUNTI'],
        stats['Q'],
        stats['PF'],
        stats['PS']
    ))

完整可运行代码

将排序和输出逻辑整合:

team_stats = {
    'Team1': {'GIOCATE': 4, 'PUNTI': 6, 'Q': 0.9, 'PF': 63, 'PS': 70},
    'Team2': {'GIOCATE': 3, 'PUNTI': 7, 'Q': 1.1, 'PF': 44, 'PS': 40},
    'Team3': {'GIOCATE': 3, 'PUNTI': 9, 'Q': 1.514, 'PF': 53, 'PS': 35},
    'Team4': {'GIOCATE': 4, 'PUNTI': 8, 'Q': 0.935, 'PF': 58, 'PS': 62},
    'Team5': {'GIOCATE': 3, 'PUNTI': 7, 'Q': 1.1, 'PF': 44, 'PS': 40},
    'Team6': {'GIOCATE': 4, 'PUNTI': 6, 'Q': 0.964, 'PF': 54, 'PS': 56},
    'Team7': {'GIOCATE': 4, 'PUNTI': 10, 'Q': 1.07, 'PF': 64, 'PS': 60},
    'Team8': {'GIOCATE': 4, 'PUNTI': 7, 'Q': 0.955, 'PF': 64, 'PS': 67}
}

# 排序
sorted_teams = sorted(team_stats.items(), key=lambda x: (-x[1]['PF'], -x[1]['Q']))

# 格式化输出
for team_name, stats in sorted_teams:
    print("{:<25} {:<5} {:<5} {:<7} {:<5} {:<5}".format(
        team_name,
        stats['GIOCATE'],
        stats['PUNTI'],
        stats['Q'],
        stats['PF'],
        stats['PS']
    ))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:37:50