我正在尝试将正常的嵌套迭代转换为嵌套列表,我遇到了麻烦。
for k in r.json()['app_list']:
for i in titles:
if k['name'] == i['name'] and k['platform'] == i['platform']:
array.append(session.get(k['api_url'], headers=headers).json())
return array
工作正常,但是
return [session.get(k['api_url'], headers=headers).json()
for i in titles for k in r.json()
if k['name'] == i['name'] and k['platform'] == i['platform']]
抛出此错误
if k['name'] == i['name'] and k['platform'] == i['platform']]
TypeError: string indices must be integers
答案 0 :(得分:2)
您的嵌套顺序错误,而您忘记从'app_list'
字典中获取r.json()
密钥。
列表理解循环仍然按照相同的顺序列出,在嵌套时从左到右。换句话说,使用相同的顺序作为原始嵌套for
语句:
return [session.get(k['api_url'], headers=headers).json()
for k in r.json()['app_list']
for i in titles
if k['name'] == i['name'] and k['platform'] == i['platform']]
只需将所有内容放在前面的array.append()
电话 中,然后从:
和{{1}中移除for
冒号即可达到上述目的}}语句并将结果放在if
方括号内。
您忘记了对[...]
的{{1}}订阅,这是异常的实际原因; ['app_list']
会生成一个字典,因此每个r.json()
都绑定到该字典中的键,导致r.json()
订阅失败。