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

Python处理JSON:仅提取首个同义词列表的技术问题

解决思路与优化代码

我完全懂你的需求——就是要从返回的JSON数据里,给每个单词揪出第一个完整的同义词列表(比如那些兼类词,只取第一个词性对应的所有同义词,而不是某个列表里的单个词)对吧?

先给你捋清楚现有代码的核心逻辑:你写的item['meta']['syns'][0]其实已经是在拿第一个完整的同义词列表了!因为syns本身是一个二维数组——外层数组的每个元素对应一个词性的同义词列表,比如watch的syns可能是[["look", "observe"], ["timepiece", "clock"], ...],[0]就精准定位到了第一个子列表,这正是你要的完整首个同义词集合。

不过你的代码还有些可以优化的地方,比如变量命名、文件读取的严谨性,以及API请求的异常处理,同时可以把关键词和对应的同义词列表关联起来,结果更清晰。下面是调整后的代码:

import requests
import json

# 别用Python内置的list当变量名,换个更清晰的名字
keywords_list = []
with open(r'C:\Users...') as file:
    for line in file.readlines():
        # 先去掉换行符再分割,避免产生空字符串元素
        keywords_list.extend(line.strip().split())

# 这里要根据你的API实际请求方式调整,以下分两种情况:

## 情况1:API支持单个关键词查询(比如通过URL参数传单词)
ship_api_url = "https://..."
for keyword in keywords_list:
    try:
        # 替换成你的API实际请求格式,比如把关键词拼到URL里
        response = requests.get(f"{ship_api_url}?word={keyword}")
        response.raise_for_status()  # 自动检测请求是否失败
        parsed_data = json.loads(response.text)
        
        # 做个简单的存在性校验,避免KeyError
        if parsed_data and 'meta' in parsed_data[0] and 'syns' in parsed_data[0]['meta']:
            first_synonyms = parsed_data[0]['meta']['syns'][0]
            print(f"关键词 '{keyword}' 的首个同义词列表: {first_synonyms}")
        else:
            print(f"关键词 '{keyword}' 未找到有效同义词信息")
    except requests.exceptions.RequestException as e:
        print(f"请求关键词 '{keyword}' 时出错: {str(e)}")

## 情况2:API批量返回所有关键词的同义词(返回结果顺序和关键词列表一致)
# response = requests.get(ship_api_url)
# response.raise_for_status()
# parsed_data = json.loads(response.text)
# 
# for idx, item in enumerate(parsed_data):
#     keyword = keywords_list[idx]
#     if 'meta' in item and 'syns' in item['meta']:
#         first_synonyms = item['meta']['syns'][0]
#         print(f"关键词 '{keyword}' 的首个同义词列表: {first_synonyms}")
#     else:
#         print(f"关键词 '{keyword}' 未找到有效同义词信息")

关键点说明

  • 核心逻辑还是item['meta']['syns'][0],它返回的是整个第一个同义词列表,而不是单个单词——比如watch会返回["look", "observe"]这样的完整数组,而不是只取look。
  • 加了异常处理,避免请求失败时程序直接崩溃;同时做了存在性校验,防止JSON结构不符合预期时抛出KeyError。
  • 把内置变量名list改成了keywords_list,避免覆盖Python内置类型。

如果之前你误以为item['meta']['syns'][0]是单个单词,可能是打印的时候没注意格式——你可以用type(first_synonyms)来验证,它的类型应该是list。

内容的提问来源于stack exchange,提问作者Mahle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:12:34