循环访问字符串列表并为列表中的每个术语附加一个 json 返回的元素



警告 这是非常非常复杂的。(我是个白痴,可能应该休息一下), 这是一个令人困惑的标题,但我会尽力解释我遇到的问题,

我有这个代码:

test_terms = ['spartan', 'forerunner', 'didact']
test_list = []
for term in test_terms:
search_term = term
search_service = PyMsCognitiveWebSearch('API_Key', search_term,
custom_params={'title': 'name', 'domain': 'url', 'mkt': 'en-usa', 'description': 'url'})
result = search_service.search(limit=3, format='json')
test_list.append(result[term].json)
print(test_list)

当它在循环之外时,这有效,我简单地运行这个:

search_term = 'spartan'
search_service = PyMsCognitiveWebSearch('API_Key', search_term,
custom_params={'title': 'name', 'domain': 'url', 'mkt': 'en-usa',
'description': 'url'})
result = search_service.search(limit=3, format='json')
test_list.append(result[0].json)
print(test_list)

这给了我:

[{'id': 'https://api.cognitive.microsoft.com/api/v7/#WebPages.0', 'name': 'Obstacle Course Races | Spartan Race', 'url': 'https://www.spartan.com/', 'isFamilyFriendly': True, 'displayUrl': 'https://www.spartan.com', 'snippet': 'Spartan Race is the global leader in obstacle course races, with the right challenge for anyone - from first-time racers to elite athletes.', 'deepLinks': ... etc, for three more results}]

我的第一直觉是简单地做for term in range(len(test_terms)):,但是这返回了一个结果,但我得到了数字 1 到 3 的信息,而不是列表中的项目。

接下来我尝试for item, term enumerate(test_terms):

但是我收到此错误:

TypeError: list indices must be integers or slices, not str

这是有道理的,但是我不确定如何继续,因为索引是一个"字符串",并且我尝试以两种不同的方式枚举它,删除result[term].json并将其更改为result.json也会引发对象错误。

任何帮助都会很棒!如果有帮助,还有包装规格。

更新:

result是一个 Web 对象,本质上是这样的(通过文档):

packaged_results = [WebResult(single_result_json) for single_result_json in json_results.get("webPages", {}).get("value", [])]

链接源代码

但它是一个巨大的嵌套列表,我把它写在白板上,它返回 3 个列表,由 9 个元素组成,混合类型,一个列表和一个字典。从字面上看,这是我的噩梦。

你在 for 循环中使用 'term' 的方式使 'term' 成为一个字符串(['spartan', 'forerunner', 'didact'] 之一)。您正在寻找要在"result[term]"中使用的整数,因此,坚持使用枚举,但请记住使用枚举元组的第一部分是"枚举",第二部分是项目。

for i, term in enumerate(test_terms):
...
test_list.append(result[i].json)

最新更新