如何同步更新原字典列表roster与排序后的sorted_roster并保持有序?
问题原因
sorted() 函数会创建一个全新的排序后列表,它会把执行时 roster 里的元素复制一份,再排序生成 sorted_roster。这两个列表是完全独立的对象,后续给 roster 新增元素只会改动原列表,不会影响已经生成的 sorted_roster 副本。
解决办法
有两种实用的处理方式:
1. 每次输出时重新生成排序列表
这是最直接的方案,当选择"o"输出时,不要复用旧的 sorted_roster,而是基于最新的 roster 重新调用 sorted():
# 用户选择"o"时执行的代码 sorted_roster = sorted(roster, key=lambda x: x['jersey_number']) print(sorted_roster)
这样每次输出的都是当前最新球员数据的排序结果。
2. 用bisect模块维护动态有序列表
如果需要频繁访问排序后的列表,不想每次都全量排序,可以用 bisect 模块在添加新球员时直接插入到正确位置,让 sorted_roster 始终保持有序:
import bisect # 初始生成有序列表 sorted_roster = sorted(roster, key=lambda x: x['jersey_number']) # 选择"a"添加新球员时的逻辑 new_player = {'jersey_number': 15, 'rating': 85} # 按球衣号码找到插入位置并插入 bisect.insort(sorted_roster, new_player, key=lambda x: x['jersey_number'])
后续输出时直接打印 sorted_roster 即可,无需再重新排序。
内容的提问来源于stack exchange,提问作者Kaii
相关产品推荐
相关产品推荐

