Как разобрать ответ из API, чтобы не указывать список в python - PullRequest
0 голосов
/ 13 марта 2020

я изучаю python первый месяц, извините, если это глупый вопрос).

import requests
url='https://api.github.com/repositories?q=language:python&sort=stars'
r=requests.get(url)
print('status code:', r.status_code)
response_dict=r.json()
print(response_dict.keys())

Но response_dict становится списком, а не типом dict. Как я могу получить дикт? Пытался сделать response_dict=dict(r.json()). Получил эту ошибку. "Элемент последовательности обновления словаря # 0 имеет длину 46; требуется 2" Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 13 марта 2020

ваш response_dict является list из 100 dict, вы можете использовать:

response_dict=r.json()[0] # if you want to access the frist dict
print(response_dict.keys())

вывод:

dict_keys(['id', 'node_id', 'name', 'full_name', 'private', 'owner', 'html_url', 'description', 'fork', 'url', 'forks_url', 'keys_url', 'collaborators_url', 'teams_url', 'hooks_url', 'issue_events_url', 'events_url', 'assignees_url', 'branches_url', 'tags_url', 'blobs_url', 'git_tags_url', 'git_refs_url', 'trees_url', 'statuses_url', 'languages_url', 'stargazers_url', 'contributors_url', 'subscribers_url', 'subscription_url', 'commits_url', 'git_commits_url', 'comments_url', 'issue_comment_url', 'contents_url', 'compare_url', 'merges_url', 'archive_url', 'downloads_url', 'issues_url', 'pulls_url', 'milestones_url', 'notifications_url', 'labels_url', 'releases_url', 'deployments_url'])

ответ содержит список из 100 словарей

len(r.json())
# 100
0 голосов
/ 13 марта 2020

Ваш ответ представляет собой список диктов. Если вы хотите sh извлечь отдельный элемент, вы можете сказать:

response_dict=r.json()[0]

Если вы хотите изменить свой список на словарь, то вы можете использовать параметр 'id' для каждого элемента в качестве ключа:

response = r.json()
response_dict = dict([ (i['id'], i) for i in response])

или, если вы предпочитаете использовать параметр 'name':

response_dict = dict([ (i['name'], i) for i in response ])
...