Python嵌套列表理解错误

时间:2016-10-10 21:57:28

标签: python list-comprehension

我正在尝试将正常的嵌套迭代转换为嵌套列表,我遇到了麻烦。

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

1 个答案:

答案 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()订阅失败。