Python合并两个JSON数据时推导式语法错误的解决方法
报错根因
这个语法错误是推导式写法不符合Python解析规则导致的:
- 你在推导式的返回值位置直接写了逗号分隔的两个值
Item, allItemsResponse[str(Item)]["en"],解析器无法识别这是元组还是字典键值对,因此提示你是否忘记给推导目标加括号。 - 额外提一句:你前面对
marketableItems的写法完全冗余,接口返回的本身就是可交易物品ID的数组,直接赋值即可,没必要写一层遍历生成和原数据完全一致的列表。
修复代码
你的需求是把物品ID和对应英文名配对成映射字典,直接用字典推导式实现即可,不需要用列表推导式。另外requests响应自带.json()方法,不需要手动调用json.loads解析响应文本,写法更简洁,完整可运行代码如下:
import requests # 获取可交易物品ID列表 marketable_resp = requests.get("https://universalis.app/api/v2/marketable") marketable_items = marketable_resp.json() # 获取全量物品基础数据 all_items_resp = requests.get("https://raw.githubusercontent.com/ffxiv-teamcraft/ffxiv-teamcraft/master/apps/client/src/assets/data/items.json") all_items = all_items_resp.json() # 生成ID对应英文名的字典 item_dictionary = { item_id: all_items[str(item_id)]["en"] for item_id in marketable_items }
如果你实际需要的是元素格式为(物品ID, 英文名)的列表,只需要给推导目标的元组加上括号即可,写法如下:
item_list = [ (item_id, all_items[str(item_id)]["en"]) for item_id in marketable_items ]
说明
你已经验证过单条allItemsResponse[str(Item)]["en"]可以正常取到数据,修复语法问题后,只要两个接口返回结构没有变动,上述代码可以直接运行,得到你需要的合并后数据集。
内容的提问来源于stack exchange,提问作者Joel Trauger
相关产品推荐
相关产品推荐

