2016-10-10 7 views
-1

通常のネストされた反復をネストリストのcompに変換しようとしていますが、問題があります。Python Nested List Comprehension Error

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']] 

はあなたの入れ子の順序が間違って持っていて、r.json()辞書から'app_list'キーを取得するのを忘れ

if k['name'] == i['name'] and k['platform'] == i['platform']] 
TypeError: string indices must be integers 
+0

'for'節をもう一度読んでください。 – user2357112

+3

また、最初のものはうまく動作します。なぜあなたは1行ですることもできない理解にそれをマングルアップ? – idjaw

+0

あなたは '['app_list']'の部分を見逃しませんでしたか? –

答えて

2

このエラーがスローされます。

リスト内包ループは、ネストするときに左から右の順番で同じ順序で表示されます。言い換えれば、あなたのオリジナルのネストされた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']] 

以上に達しただけで、その後forから:コロンを削除し、フロントでarray.append()コールにすべてのものを置くことにより、結果を[...]の角かっこで囲みます。

r.json()への['app_list']サブスクリプションを忘れました。これが例外の実際の原因です。 r.json()は辞書を生成するので、各kは、その辞書のキーにバインドされ、k['name']サブスクリプションが失敗します。

+0

facepalm .... ty tho :) – ajanakos

関連する問題