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
相关产品推荐
相关产品推荐

