-3

I have some troubles with next statement:

demo = json.loads(raw)
c = 'Return To Sender (Dub Mix)'
for i in (i for i, tr in enumerate(demo['tracks']) if c in tr['title']):
     print(i)

It works as it should, but how to add else, becouse c not always in tr['title']

The demo object:

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

}

Aaron
  • 77
  • 1
  • 9

2 Answers2

1

I would suggest:

for i, tr in enumerate(demo['tracks']):
    if c in tr['title']:
        print(i)
    else:
        pass # do something else

But if you must have it in the generator expression, you have to replace the filter if at the end of the for loop for-in-if with if-else-for-in:

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

See if else in a list comprehension

Community
  • 1
  • 1
Dan D.
  • 73,243
  • 15
  • 104
  • 123
0

you can try this one liner!.

guessing you only wants to print (i) when condition gets true

 for i in (i for i, tr in enumerate(demo['tracks']):
     print(i) if c in tr['title']) else ''
DexJ
  • 1,264
  • 13
  • 24