2017-04-01 4 views
0

Ich brauche Index (Nummer) des Elements in der Liste, die eine Zeichenfolge c = "Return To Sender (Matrey Remix)" enthält. Holen Sie sich dann Informationen aus diesem Index. Aber ich habe Nummern aller Gegenstände in der Liste. Keine FehlerPython 3 Probleme mit Wörterbuch und Liste

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] 

Zum Beispiel habe ich 7 Track-Titel in Folge von Code:

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

Track-Titel:

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) 

Aber Ausgabe ist leer

Das demo Objekt:

{ 
    '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)', 
    }] 
} 

Antwort

5

str.find() kehren 0, wenn der Text am Anfang zu finden ist:

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

Das ist ein falsch Wert in einem Booleschen Kontext betrachtet wird:

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

Wenn der Text nicht da ist, str.find() gibt stattdessen -1 zurück. Vom str.find() documentation:

Rückkehr der niedrigste Index im String, wo Teilzeichenfolge Unter gefunden [...]. Gibt -1 zurück, wenn sub nicht gefunden wird. Diese

bedeutet, dass nur, wenn der Text am Anfang ist wird Ihr Code nicht alles drucken. In allen anderen Fällen (einschließlich nicht Finden des Titels) werden die Titel gedruckt.

Verwenden Sie nicht str.find(). Verwenden Sie inTrue zu erhalten, wenn der Text besteht, False wenn dies nicht der Fall:

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

Demo Ihre json Daten:

>>> 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 
Verwandte Themen