我正在使用Python从Pixabay API中获取一些JSON。这就是我所拥有的:
import requests
r = requests.get('http://pixabay.com/api/?username=USERNAME&key=APIKEY&search_term=yellow+flower&image_type=photo&per_page=8')
r = r.json()
for i in r:
for item in r['hits']:
print item['type']
项目['type']中的结果将返回,而不是URL中请求的8次,但是16次。经过多次检查后,我意识到我的结果在for循环中被复制了。从API返回的json具有正确的结果数,8。在嵌套for循环之前打印第一个for循环的结果,再次显示8个结果。那么我的第二个for循环出了什么问题?
有更好的方法吗?
以下是原始json请求的一部分:
{
totalHits: 240,
hits: [
{
previewHeight: 99,
likes: 17,
tags: "flower, yellow, spehel",
model_release: false,
webformatHeight: 423,
views: 3743,
webformatWidth: 640,
previewWidth: 150,
comments: 5,
downloads: 3148,
pageURL: "http://pixabay.com/en/flower-yellow-spehel-144486/",
previewURL: "http://pixabay.com/static/uploads/photo/2013/07/10/18/13/flower-144486_150.jpg",
webformatURL: "http://pixabay.com/get/ed740e2b05f6d3677fc8/1389429953/8ecd2717750798bd3f896e9b_640.jpg",
imageWidth: 4928,
user: "corinaselberg",
type: "photo",
id: 144486,
imageHeight: 3264
},
{
previewHeight: 84,
likes: 5,
tags: "flower, yellow, close",
model_release: false,
webformatHeight: 360,
views: 2286,
webformatWidth: 640,
previewWidth: 150,
comments: 2,
downloads: 2092,
pageURL: "http://pixabay.com/en/flower-yellow-close-195893/",
previewURL: "http://pixabay.com/static/uploads/photo/2013/10/15/09/12/flower-195893_150.jpg",
webformatURL: "http://pixabay.com/get/e26fb4e50bd3b145d905/1389429953/bf1a2065a9c9d042d1abdc6b_640.jpg",
imageWidth: 4000,
user: "Josch13",
type: "photo",
id: 195893,
imageHeight: 2250
}
]
}
我确定我做错了但是经过几个小时的冲击,我想我会在这里询问是否有人能发现我的问题(使用代码)。
提前致谢!
答案 0 :(得分:2)
您的顶级对象是一个字典,但是您正在循环该对象,这意味着您正在循环键。在该循环内部,您也循环遍历r['hits']
,为每个键重复该循环。外部字典有2个键,因此您将重复r['hits']
循环两次。
外部循环完全是多余的,将其删除:
r = requests.get('http://pixabay.com/api/?username=USERNAME&key=APIKEY&search_term=yellow+flower&image_type=photo&per_page=8')
r = r.json()
for item in r['hits']:
print item['type']