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

Python中索引JSON文件并随机获取卡牌时出现KeyError的解决求助

Python中索引JSON文件并随机获取卡牌时出现KeyError的解决求助

看起来你遇到的问题是因为JSON里的cards结构不是列表而是字符串键的字典,而且这些键还是非连续的数字字符串,导致你用整数索引去访问的时候找不到对应的键~ 咱先理清楚问题根源,再给你解决办法:

问题根源拆解

你给出的JSON里,"cards"对应的是一个字典,键是"25"、"113"这类字符串格式的数字,不是列表的连续整数索引:

{
  "cards": {
    "25": { ... },
    "113": { ... },
    "27": { ... }
  }
}

而你原来的代码里,random.randint(0, len(cards["cards"])-1)生成的是整数(比如0、1、2),但字典里根本没有这些整数作为键,自然会抛出KeyError(比如你看到的KeyError: 1,就是因为字典里没有整数键1)。

两种简单的修改方案

方案1:把字典值转成列表,直接随机选元素

这是最直观的方法,把cards字典的所有值转换成列表,然后用random.choice()直接随机选一个元素:

import json
import random

def genCard():
    with open("cards.json", "r") as file:
        cards = json.load(file)
    # 将字典的所有卡牌值转为列表
    card_list = list(cards["cards"].values())
    # 随机选取一个卡牌
    random_card = random.choice(card_list)
    print(random_card)
    return random_card

方案2:随机选一个字典键,再取值

如果你需要保留键的信息,也可以先获取所有键的列表,再随机选一个键来访问对应的卡牌:

import json
import random

def genCard():
    with open("cards.json", "r") as file:
        cards = json.load(file)
    # 获取所有卡牌的键列表
    card_keys = list(cards["cards"].keys())
    # 随机选一个键
    random_key = random.choice(card_keys)
    # 通过键获取对应的卡牌
    random_card = cards["cards"][random_key]
    print(random_card)
    return random_card

额外小建议

如果你的JSON文件是可以修改的,也可以把"cards"改成列表格式(比如下面这样),这样你最初用索引访问的思路就能直接用啦:

{
  "cards": [
    {"id": 25, "name": "Aliks", ...},
    {"id": 113, "name": "Nichel", ...},
    {"id": 27, "name": "Arian", ...}
  ]
}

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 06:55:32