【问题标题】:Retrieving the first list only (JSON-Python)仅检索第一个列表(JSON-Python)
【发布时间】:2019-12-19 10:05:32
【问题描述】:

我有一个复杂的 JSON 对象,其中包含有关单词的字典信息,我只想获取同义词。我设法检索了它们,但有些单词有两个或多个同义词列表(因为它们可以同时是动词和名词)。我只想获得第一个同义词列表。这是我所做的:

import requests
import json
with open(r'C:\Users...') as file:
    list = []
    for line in file.readlines():
        list += line.split() 
    for keyword in list:
        print(keyword)
        ship_api_url = "https://..."
        request_data = requests.get(ship_api_url)
        data = request_data.text
        parsed = json.loads(data)
        # print(json.dumps(parsed, indent=3))
        for item in parsed:
            print(item['meta']['syns'][0])

这就是我得到的 - 请注意,“watch”这个词有三个同义词列表,“create”这个词只有一个同义词列表,“created”这个词有两个同义词列表:

watch
['custodian', 'guard', 'guardian', 'keeper', 'lookout', 'minder', 'picket', 'sentinel', 'sentry', 'warden', 'warder', 'watcher', 'watchman']
['eye', 'follow', 'observe']
['anticipate', 'await', 'expect', 'hope (for)']
create
['beget', 'breed', 'bring', 'bring about', 'bring on', 'catalyze', 'cause', 'do', 'draw on', 'effect', 'effectuate', 'engender', 'generate', 'induce', 'invoke', 'make', 'occasion', 'produce', 'prompt', 'result (in)', 'spawn', 'translate (into)', 'work', 'yield']
created
['begot', 'bred', 'brought', 'brought about', 'brought on', 'catalyzed', 'caused', 'did', 'drew on', 'effected', 'effectuated', 'engendered', 'generated', 'induced', 'invoked', 'made', 'occasioned', 'produced', 'prompted', 'resulted (in)', 'spawned', 'translated (into)', 'worked', 'yielded']
['beget', 'breed', 'bring', 'bring about', 'bring on', 'catalyze', 'cause', 'do', 'draw on', 'effect', 'effectuate', 'engender', 'generate', 'induce', 'invoke', 'make', 'occasion', 'produce', 'prompt', 'result (in)', 'spawn', 'translate (into)', 'work', 'yield']

如果我在已有的 [0] 之后添加另一个 [0],我会得到每个列表的第一个单词,而不是我需要的第一个完整列表...

【问题讨论】:

  • 只需在print(item['meta']['syns'][0]) 之后添加break 语句并停止循环。
  • 非常感谢!使用 break 语句,我得到了我想要的确切结果。但我仍然想知道如何从列表中选择一个列表...
  • 第一个列表是item['meta']['syns'][0],您可以像在问题中描述的那样添加[0] 时那样通过索引它们来访问其中的元素。它是一个列表,因此您可以执行其他操作,例如通过 for 循环遍历其内容。

标签: python json list indexing


【解决方案1】:

如果我猜对了,你想做这样的事情:

import requests
import json
with open(r'C:\Users...') as file:
    list = []
    for line in file.readlines():
        list += line.split() 
    for keyword in list:
        print(keyword)
        ship_api_url = "https://..."
        request_data = requests.get(ship_api_url)
        data = request_data.text
        parsed = json.loads(data)
        # print(json.dumps(parsed, indent=3))
        for item in parsed:
            for i in item['meta']['syns']:
                print(item['meta']['syns'][i])

另外,不要将变量命名为 list,因为它是 Python 中的保留变量。

【讨论】:

  • 感谢变量命名提示。不幸的是,您发送给我的代码不起作用,我得到:TypeError: list indices must be integers or slices, not list
【解决方案2】:

正如 martineau 的评论中所建议的,我通过在 print(item['meta']['syns'][0]) 之后添加一个 break 语句来停止循环,从而解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多