如何实现Python JSON排行榜分数相同则并列排名功能?
解决排行榜同分排名相同的问题
针对你需要实现的「排行榜中分数相等则排名相同」的逻辑,以下是完整的实现方案:
核心思路
假设你的分数已经按从高到低降序排列(如你提供的JSON数据所示),我们只需要从第二个元素开始遍历,对比当前分数与前一个分数:
- 若分数相同,将当前排名设为前一个的排名;
- 若分数不同,当前排名为前一个排名+1(保证名次正常递增);
- 新增保存函数,确保修改后的排名能持久化到JSON文件中。
修改后的完整代码
import json b_s = 15 s_s = 20 g_s = 25 def getLeaderBoard(): with open('plist.json', 'r') as f: myDict = json.load(f) # 用json.load替代json.loads(f.read()),更简洁高效 return myDict def saveLeaderBoard(leaderboard): # 新增保存函数,将修改后的排行榜写回文件 with open('plist.json', 'w') as f: json.dump(leaderboard, f, indent=4) def checkTie(): myDict = getLeaderBoard() scores = myDict["score"] ranks = myDict["rank"] # 从第2个元素开始遍历(索引1),对比前一个分数 for i in range(1, len(scores)): if scores[i] == scores[i-1]: # 同分则继承前一个的排名 ranks[i] = ranks[i-1] else: # 不同分则排名在前一个基础上+1 ranks[i] = ranks[i-1] + 1 # 保存修改后的排名 saveLeaderBoard(myDict) return myDict # 测试执行 if __name__ == "__main__": updated_board = checkTie() print("更新后的排行榜:") print(json.dumps(updated_board, indent=4))
效果验证
运行代码后,你的JSON文件中rank数组会更新为:
[1, 2, 3, 3, 5]
完美实现了同分用户(mat和yes)共享第3名的需求。
内容的提问来源于stack exchange,提问作者Dwij
相关产品推荐
相关产品推荐

