Python у новичка есть некоторые проблемы с функцией поиска spotipy - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь настроить базовый инструмент c, который должен выполнять следующие действия: 1. Поиск музыкантов в Spotify 2. Печатать результаты так, как я могу их использовать для чего-либо (например, показывать вывод в окне или что-то вроде этого)

К сожалению, я не могу обернуться вокруг следующей проблемы:

import spotipy
import sys
from spotipy.oauth2 import SpotifyClientCredentials


client_credentials_manager = SpotifyClientCredentials(client_id='',
                                                           client_secret='')


spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)


result = spotify.search(q='Korn', limit=5)

for i, t in enumerate(result['tracks']['items']):     # way i dont understand
        print (' ', i, t['name'])


print(result)       #way i would like to do it

Код может напечатать список таким способом перечисления, но не способен печатать его нормально. Дело в том, что я не понимаю, как перечисление делает это. Может, кто-нибудь подскажет, как работает функция поиска и перечисления, и, возможно, покажите мне элегантное решение, чтобы я мог распечатать этот список?

1 Ответ

0 голосов
/ 27 апреля 2020

Я не знаю о модуле spotipy, поэтому мне придется принять несколько вещей, основываясь на том, что вы сказали, работает или не работает.

Итак ... ваша переменная с именем 'result Кажется, ведет себя как словарь. Вы можете индексировать его ключами («дорожки», «предметы») (как показано там: result['tracks']['items']), и это, кажется, возвращает вам вещи, которые ведут себя как список, содержащий вещи, которые ведут себя как словарь, что среди других В вещах содержится ключ «имя» (как показано там: t['name']).

Чтобы проиллюстрировать, как работает enumerate, вот пример:

>>> hello = ['h', 'e', 'l', 'l', 'o']
>>> print(list(enumerate(hello)))
[(0, 'h'), (1, 'e'), (2, 'l'), (3, 'l'), (4, 'o')]

По сути, он возвращает вам кортежи каждого индекса в списке и то, что находится в этом индексе.

Также обратите внимание, что у Python есть принцип, называемый «утки». В нем говорится: «Если это похоже на утку и крякает как утка, значит, это утка». Вот почему я не очень беспокоюсь о том, какой тип объекта, меня волнует, как он себя ведет.

Теперь, когда вы говорите что-то вроде:

for index, element in enumerate(elements):

Вы Используете то, что называется распаковка. Он позволяет вам разделить кортежи, которые enumerate дает вам, на две переменные.

Тогда, если мы хотим просто сделать print(result), класс, который позволяет вам создавать результат, должен будет реализовать либо __repr__, либо __str__ методы. В нем вы будете иметь все логи c, которые содержатся в вашем файле для l oop, собирая данные по соответствующим ключам в словарном объекте и возвращая правильно отформатированную строку. Но похоже, что этот класс взят из внешней библиотеки, поэтому я не уверен, что было бы неплохо реализовать их самостоятельно (у меня пока нет опыта в этом).

Надеюсь, что мои объяснения были хотя бы немного полезны.

...