如何在一级键动态变化的嵌套JSON字典中访问子字典?
解决动态一级键的JSON数据访问问题
问题描述
我收到如下JSON响应:
{'3830': {'success': True, 'data': {'categories': [{'id': 2, 'description': 'Single-player'}, {...}]}}}
想要访问其中的子字典categories,但一级字典的键(如上例中的3830)是动态变化的。该JSON响应是requests.get遍历列表得到的结果,每次响应的一级键都会改变。无法在函数中设置变量来存储categories的内容。
尝试过的代码:
data = await response.json() mp_data = data['3830']['data']['categories']
第一次迭代因键匹配成功,但后续迭代触发KeyError。还尝试用['*']和[*]作为一级键的变量,均无效。
可行解决办法
方法1:直接获取第一个键对应的值(最常用)
如果每次响应的一级字典只有一个动态键,直接取第一个值即可,无需关心键名:
data = await response.json() # 取字典的第一个值 top_level_content = next(iter(data.values())) mp_data = top_level_content['data']['categories']
iter(data.values())生成字典值的迭代器,next()快速获取第一个元素,不管键是什么都能拿到目标上级内容。
方法2:遍历所有一级键(适配多键场景)
如果一级字典可能存在多个动态键,需要逐个处理每个键对应的categories:
data = await response.json() for key in data: mp_data = data[key]['data']['categories'] # 在这里处理mp_data,比如存入列表或直接使用
方法3:用popitem()取键值对(不推荐,会修改原字典)
如果只需要一次性获取唯一的键值对,可使用popitem(),但该方法会删除原字典中的对应键值对,仅适合临时使用:
data = await response.json() _, top_level_content = data.popitem() mp_data = top_level_content['data']['categories']
内容的提问来源于stack exchange,提问作者Jared Robertson
相关产品推荐
相关产品推荐

