Прежде всего, то, что вы делаете - это операция «map» (преобразование элементов одного массива в другой массив / список), а не операция «filter» (удаление определенных элементов, соответствующих условию, измассив / список).
Во-вторых, вы не должны зацикливаться на диапазоне.Это цикл for in
, а не традиционный цикл for
, поэтому здесь нет индекса.Вместо этого каждая итерация содержит элемент в списке / массиве.
artists = []
for track in songs['tracks']:
artists.append(track['artists'][0]['name'])
Вы можете превратить это в один вкладыш, используя список пониманий .Они принимают общую предпосылку итерации по списку для создания нового списка, возможно, трансформируя результаты и, возможно, фильтруя результаты.Синтаксис, который они используют:
result = [ <transformation> for item in items if <condition> ]
В вашем случае у вас нет явной необходимости в условии, так как вы просто отображаете один набор значений массива в другой, например:
artists = [ track[artists][0]['name'] for track in songs['tracks'] ]
Однако, если бы вы фильтровали, то условие было бы тем, что вы бы использовали.Например
artists_with_long_songs = [ track[artists][0]['name'] for track in songs['tracks'] if track['length'] > 600 ]