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

字典迭代变量赋值异常:Solo排位变量被错误设为None

问题分析与解决

核心问题

你的代码逻辑存在关键漏洞:两个循环都会完整遍历整个ranked_stats列表。以Solo排位的循环为例:

  • 第一个条目是RANKED_SOLO_5x5,此时会正确给所有solo_*变量赋值
  • 但第二个条目是RANKED_FLEX_SR,进入else分支后,所有solo_*变量会被重新设为None
  • 循环结束后,变量保留的是最后一次循环的结果,也就是None

Flex循环看似正常,只是因为列表最后一个条目是RANKED_FLEX_SR,最后一次循环覆盖成了正确值而已。

修复方案

方案1:初始化默认值,遍历仅更新匹配项

先把所有变量初始化为None,遍历列表时只在匹配到对应队列类型时更新变量,不执行else分支的覆盖操作:

# 初始化Flex变量为默认值
flex_rank_name = "None"
flex_tier = "None"
flex_rank = "None"
totalrank_flex = "None"
winrate_flex = "None"
wins_flex = "None"
losses_flex = "None"

# 初始化Solo变量为默认值
solo_rank_name = "None"
solo_tier = "None"
solo_rank = "None"
totalrank_solo = "None"
winrate_solo = "None"
wins_solo = "None"
losses_solo = "None"

# 一次遍历处理两种队列类型
for rank in ranked_stats:
    if rank['queueType'] == "RANKED_FLEX_SR":
        flex_rank_name = "Ranked Flex"
        flex_tier = rank["tier"]
        flex_rank = rank['rank']
        totalrank_flex = flex_tier + " " + flex_rank
        winrate_flex = rank['wins']/(rank['wins']+rank['losses'])
        winrate_flex *= 100
        winrate_flex = "{:.2f}%".format(winrate_flex)
        wins_flex = rank['wins']
        losses_flex = rank['losses']
    elif rank['queueType'] == "RANKED_SOLO_5x5":
        solo_rank_name = "Ranked Solo/Duo"
        solo_tier = rank["tier"]
        solo_rank = rank['rank']
        totalrank_solo = solo_tier + " " + solo_rank
        winrate_solo = rank['wins']/(rank['wins']+rank['losses'])
        winrate_solo *= 100
        winrate_solo = "{:.2f}%".format(winrate_solo)
        wins_solo = rank['wins']
        losses_solo = rank['losses']

方案2:用字典存储结果(更简洁易维护)

把两种排位的数据存入字典,避免大量独立变量,代码结构更清晰:

rank_data = {
    "flex": {
        "name": "None",
        "tier": "None",
        "rank": "None",
        "total_rank": "None",
        "winrate": "None",
        "wins": "None",
        "losses": "None"
    },
    "solo": {
        "name": "None",
        "tier": "None",
        "rank": "None",
        "total_rank": "None",
        "winrate": "None",
        "wins": "None",
        "losses": "None"
    }
}

for rank in ranked_stats:
    queue_type = rank['queueType']
    if queue_type == "RANKED_FLEX_SR":
        target = rank_data["flex"]
        target["name"] = "Ranked Flex"
    elif queue_type == "RANKED_SOLO_5x5":
        target = rank_data["solo"]
        target["name"] = "Ranked Solo/Duo"
    else:
        continue  # 跳过其他队列类型
    
    target["tier"] = rank["tier"]
    target["rank"] = rank["rank"]
    target["total_rank"] = f"{rank['tier']} {rank['rank']}"
    total_games = rank['wins'] + rank['losses']
    winrate = (rank['wins'] / total_games) * 100
    target["winrate"] = "{:.2f}%".format(winrate)
    target["wins"] = rank['wins']
    target["losses"] = rank['losses']

# 使用时直接取字典对应值,比如rank_data["solo"]["total_rank"]

验证效果

用你提供的ranked_stats列表测试,两种方案都能正确得到:

  • Solo排位数据:BRONZE II,胜率61.54%,胜8负5
  • Flex排位数据:BRONZE II,胜率50.00%,胜5负5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:05:31