Py学习  »  Python

python中如何从api解析应答到dict not list

Stepan Korenevskyy • 4 年前 • 411 次点击  

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变成list而不是dict类型。我怎样才能得到dict? response_dict=dict(r.json()) . 得到这个错误。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56672
 
411 次点击  
文章 [ 2 ]  |  最新文章 4 年前
kederrac
Reply   •   1 楼
kederrac    4 年前

你的 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'])

len(r.json())
# 100
Alan Dyke
Reply   •   2 楼
Alan Dyke    4 年前

你的回答是一系列的口述。如果你想提取一个项目,你可以说

response_dict=r.json()[0]

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

或者如果您喜欢使用“name”参数:

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