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

如何实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:36