2017-04-01 12 views
0

リスト内の項目のインデックス(番号)を取得する必要があります。リストには文字列c = "Return To Sender (Matrey Remix)"が含まれています。次に、このインデックスから情報を取得します。しかし、私はリストのすべての項目の番号を持っています。エラー辞書とリストでPython 3の問題

例えば
demo = json.loads(raw) 
c = "Return To Sender (Matrey Remix)" 
for i in (i for i, tr in enumerate(demo['tracks']) if str(tr['title']).find(c)): 
    print(i) 
dict = demo['tracks'][i] 

私は、コードの結果7曲のタイトルがあります。

for tr in demo['tracks']: 
    print(tr['title']) 

トラックのタイトル:

Return To Sender (Original Mix) 
Return To Sender (Matrey Remix) 
Return To Sender (Matrey Remix) 
Return To Sender (Matrey Remix) 
Return To Sender (Original Mix) 
Return To Sender (Original Mix) 
Return To Sender (Original Mix) 

しかし、出力は空

demo対象ではありません。

{ 
    'mixes': [], 
    'packs': [], 
    'stems': [], 
    'tracks': [{ 
     'id': 7407969, 
     'mix': 'Original Mix', 
     'name': 'Return To Sender', 
     'title': 'Return To Sender (Original Mix)', 
    }, { 
     'id': 7407971, 
     'mix': 'Matrey Remix', 
     'name': 'Return To Sender', 
     'title': 'Return To Sender (Matrey Remix)', 
    }, { 
     'id': 9011142, 
     'mix': 'Matrey Remix', 
     'name': 'Return To Sender', 
     'title': 'Return To Sender (Matrey Remix)', 
    }, { 
     'id': 7846774, 
     'mix': 'Matrey Remix', 
     'name': 'Return To Sender', 
     'title': 'Return To Sender (Matrey Remix)', 
    }, { 
     'id': 7407969, 
     'mix': 'Original Mix', 
     'name': 'Return To Sender', 
     'title': 'Return To Sender (Original Mix)', 
    }, { 
     'id': 9011141, 
     'mix': 'Original Mix', 
     'name': 'Return To Sender', 
     'type': 'track', 
    }, { 
     'id': 7789328, 
     'mix': 'Original Mix', 
     'name': 'Return To Sender', 
     'title': 'Return To Sender (Original Mix)', 
    }] 
} 

答えて

5

str.find()戻り0テキストが先頭で発見された場合:ブール値のコンテキストで値とみなされ

>>> 'foo bar'.find('foo') 
0 

>>> if 0: 
...  print('Found at position 0!') 
... 
>>> 

テキストがない場合は、 str.find()は代わりに-1を返します。

戻るサブサブ[...]を発見された文字列の中で最も低いインデックス:str.find() documentationから。 subが見つからない場合は-1を返します。

これはは、テキストが開始にある場合にのみ、あなたのコードは何も印刷されないことを意味します。他のすべての場合(はタイトルを見つけられないを含む)、トラックが印刷されます。

str.find()を使用しないでください。そうでない場合False、テキストがある場合Trueを取得するにはinを使用する:あなたのjsonデータを使用して

for i in (i for i, tr in enumerate(demo['tracks']) if c in tr['title']): 

はデモ:

>>> c = "Return To Sender (Matrey Remix)" 
>>> for i in (i for i, tr in enumerate(demo['tracks']) if c in tr['title']): 
...  print(i) 
... 
1 
2 
3