2016-10-10 121 views
-1

我试图将正常的嵌套迭代转换为嵌套列表comp,我遇到了麻烦。Python嵌套列表理解错误

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

请再次阅读'for'子句。 – user2357112

+3

另外,你的第一个工作得很好。为什么要把它理解为一种你甚至无法在单一行中完成的理解? – idjaw

+0

难道你不会错过'['app_list']'部分? –

回答

2

你有你的嵌套顺序错了,你忘了帮从r.json()字典'app_list'关键。

列表理解循环仍按照相同的顺序列出,从左到右嵌套它们。换句话说,使用相同的顺序你原来的嵌套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()呼叫在前面,然后从for取出:冒号和if声明并将结果放在[...]方括号内。

您忘记了['app_list']订阅r.json(),这是异常的真正原因; r.json()生成字典,因此每个k都绑定到该字典中的密钥,使得k['name']订阅失败。

+0

facepalm .... ty tho :) – ajanakos