#python
#python
Вопрос:
У меня есть файл .json, полный сведений о песнях из Spotify, который хранится в плейлистах. (Такая информация, как название песни, исполнитель, название альбома).
Например:
print(data['playlists'][999]['tracks'][43]['track_name'])
print(data['playlists'][999]['tracks'][43]['artist_name'])
ВОЗВРАТ:
Cosmic Angel - Acoustic From Capitol Studios
Grizfolk
Некоторые данные выглядят так:
'album_uri': 'spotify:album:3yHHbz0wapmu6xF82vHkCU',
'duration_ms': 209280,
'album_name': 'Rewind'},
{'pos': 93,
'artist_name': 'Thomas Rhett',
'track_uri': 'spotify:track:5kNe7PE09d6Kvw5pAsx23n',
'artist_uri': 'spotify:artist:6x2LnllRG5uGarZMsD4iO8',
'track_name': 'Die A Happy Man',
'album_uri': 'spotify:album:4ykbJPI8MPscFzROE8dqLy',
'duration_ms': 227426,
'album_name': 'Tangled Up'},
{'pos': 94,
'artist_name': 'Thomas Rhett',
'track_uri': 'spotify:track:4O1CExxinEpKZi3861NlTK',
'artist_uri': 'spotify:artist:6x2LnllRG5uGarZMsD4iO8',
'track_name': 'Get Me Some Of That',
'album_uri': 'spotify:album:2ZHYOFW5giX6a4n5eqTnUB',
'duration_ms': 187400,
'album_name': 'It Goes Like This'},
Я хочу создать функцию для добавления всех названий треков и имен исполнителей в словарь.
Я пробовал это:
def artiname(p,t):
d = {}
for i in range(p):
for j in range(t):
artist = data['playlists'][p]['tracks'][t]['artist_name']
d['artist']=artist
track = data['playlists'][p]['tracks'][t]['track_name']
d['track']=track
Однако это только выводит:
{'artist': 'Grizfolk'}
Вместо этого я хочу убедиться, что это перебирает весь список воспроизведения, заканчивая словарем длины p * t.
Комментарии:
1. Мне любопытно, почему есть вообще какой-либо вывод, если вы ничего не печатаете. Пожалуйста, покажите ваш точный код и как вы вызываете функцию
2. Привет, Тристан, словарь может иметь только одно значение для «исполнителя». Вероятно, вам нужен список словарей, по одному на песню. Также вам почти наверняка понадобится один цикл for, а не два вложенных. Пожалуйста, отредактируйте свой вопрос и включите код, чтобы показать, с какими аргументами вы вызываете свою функцию, чтобы мы могли понять: что такое p и t и почему вы принимаете все комбинации?
3. @Alexis Спасибо за вашу помощь. Это то, что мне было нужно. Я написал это, и это работает: (Кстати, как мне правильно отображать код?)
song_playlist ={} for i, n in enumerate(data["playlists"]): song_playlist[i] = [] for m in n["tracks"]: song_playlist[i].append(m["track_name"]) def make_songlist(x): d = {"playlist": 0, "song": x[0]} df = pd.DataFrame(d) for n in range(1, len(x)//2): d = {"playlist": n, "song": x[n]} df2 = pd.DataFrame(d) df = df.append(df2, ignore_index = True) return df data=make_songlist(song_playlist)
4. Привет, Тристан, ты не можешь показывать блоки кода в комментариях — они должны быть короткими. Если этот код является решением вашего вопроса, вы можете опубликовать его как «самоответ» и принять его, чтобы записать, что ваша проблема решена. Но вы должны знать, что вы неправильно используете структуру данных словаря, нет смысла использовать целые числа в качестве ключей.
song_playlist
должен быть список списков дорожек, а не словарь списков дорожек.5. @Alexis Спасибо за вашу помощь! Я новичок в кодировании и stackoverflow.