2017-04-01 119 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

返回指数最低的串在子发现[...]。如果未找到子项,则返回-1。

这意味着只有当文本是在开始将你的代码不会打印出任何东西。在所有其他情况下(包括而不是找到标题),曲目将被打印。

请勿使用str.find()。使用in得到True如果文本是存在的,False如果不是:使用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