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

如何按花名册编号排序Python字典?已尝试sorted与lambda,是否用SortedDict?

按花名册编号排序字典的解决方案

首先明确你当前代码的问题:

  • 你写的sorted(Roster1, key = lambda x:x[0])完全起不到按编号排序的作用——lambda取的是键的第一个字符(所有键都是以'p'开头),等于没做有效排序;而且sorted函数返回的是排序后的键列表,你没保存这个结果,直接打印原字典自然看不到变化。
  • 另外,Python 3.7及以上版本的普通字典已经默认保留插入顺序,你当前的字典键是按player 1到player 4依次添加的,本身就是有序的,但如果后续出现键顺序被打乱、或者需要通用的编号排序逻辑,就得调整写法。

方案一:用sorted处理键,遍历排序后的结果(无需SortedDict)

这是最直接的解决方式,不需要额外依赖。只要修正排序的key逻辑,提取键里的数字部分作为排序依据,再遍历排序后的键列表输出即可:

Roster1={
    'player 1':[],
    'player 2':[],
    'player 3':[],
    'player 4':[]
}
for n in range(4):
    jersey=int(input(f"Enter player {n}'s jersey number:\n"))
    rating=int(input(f"Enter player {n}'s rating number:\n"))
    Roster1[f"player {n+1}"]=(jersey, rating)

# 正确排序键:提取player后面的数字转为整数作为排序依据
sorted_players = sorted(Roster1.keys(), key=lambda x: int(x.split()[1]))

# 遍历排序后的键输出
for player in sorted_players:
    jersey, rating = Roster1[player]
    print(f'Jersey number: {jersey}, Rating: {rating}')

方案二:使用SortedDict(仅当字典需始终保持排序时用)

如果你的场景需要字典在后续添加、删除球员时,始终自动按编号维持排序状态,才需要用到SortedDict(注意是第三方库sortedcontainers中的实现,Python标准库的OrderedDict仅保留插入顺序,不会自动排序)。步骤如下:

  1. 先安装依赖:pip install sortedcontainers
  2. 修改代码:
from sortedcontainers import SortedDict

# 定义排序规则:按player编号的整数大小排序
def sort_key(player):
    return int(player.split()[1])

# 初始化SortedDict并指定排序key
Roster1 = SortedDict(key=sort_key)

# 即使乱序添加球员,字典也会自动按编号排序
Roster1['player 3'] = (12, 90)
Roster1['player 1'] = (8, 85)
Roster1['player 4'] = (23, 95)
Roster1['player 2'] = (5, 88)

# 直接遍历就是排序后的结果
for player in Roster1:
    jersey, rating = Roster1[player]
    print(f'Jersey number: {jersey}, Rating: {rating}')

总结

  • 如果你只是一次性排序输出结果,用方案一就足够,完全不需要SortedDict;
  • 只有当需要字典长期保持排序状态(动态增删时自动维护顺序),才需要考虑使用SortedDict。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:15