Python 3与字典和列表的麻烦

Aar*_*ron 0 python json dictionary python-3.x

我需要获取列表中项目的索引(数字),其中包含一个字符串c = "Return To Sender (Matrey Remix)".然后从该索引中获取信息.但是我列出了所有项目的数量.没有错误

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]
Run Code Online (Sandbox Code Playgroud)

例如,我在代码结果中有7个曲目标题:

for tr in demo['tracks']:
    print(tr['title'])
Run Code Online (Sandbox Code Playgroud)

曲目标题:

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)
Run Code Online (Sandbox Code Playgroud)

但输出是空的

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)',
    }]
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

str.find()0在开头找到文本时返回:

>>> 'foo bar'.find('foo')
0
Run Code Online (Sandbox Code Playgroud)

这在布尔上下文中被视为false值:

>>> if 0:
...     print('Found at position 0!')
...
>>>
Run Code Online (Sandbox Code Playgroud)

如果文本不存在,则str.find()返回-1.从str.find()文档:

返回找到substring sub的字符串中的最低索引[...].如果未找到sub,则返回-1.

这意味着只有文本在开头时,您的代码才会打印任何内容.在所有其他情况下(包括找到标题),将打印曲目.

不要用str.find().用in得到True,如果文本是存在的,False如果它不是:

for i in (i for i, tr in enumerate(demo['tracks']) if c in tr['title']):
Run Code Online (Sandbox Code Playgroud)

使用您的json数据进行演示:

>>> 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
Run Code Online (Sandbox Code Playgroud)