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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:31:01