我想在下面的JSON响应中找出rain这个词的出现,我编写了下面的python代码,并附加了JSON响应和我在控制台中得到的错误。
我想检查'main'
中的'description'
和'weather'
的值来检查它是否包含字符串或子字符串'rain'
所以它应该为'1'
,'Rain'
,'rain'
和'heavy rain'
打印'Heavy rain'
。
如果1
出现在JSON响应中,我希望得到rain
的输出,否则0
import requests, json
r = requests.get("climate api link")
r= json.loads(r.text)
r['weather']
def search(values, searchFor):
for k in values:
for v in values[k]:
if searchFor in v:
return k
return None
search(r, 'Rain')
JSON响应:
{
"coord":{
"lon":72,
"lat":19
},
"weather":[
{
"id":800,
"main":"Clear",
"description":"clear sky",
"icon":"01n"
}
],
"base":"stations",
"main":{
"temp":300.255,
"pressure":1025.08,
"humidity":95,
"temp_min":300.255,
"temp_max":300.255,
"sea_level":1025.12,
"grnd_level":1025.08
},
"wind":{
"speed":4.66,
"deg":334.002
},
"clouds":{
"all":0
},
"dt":1520266101,
"sys":{
"message":0.0043,
"country":"IN",
"sunrise":1520213280,
"sunset":1520255940
},
"id":6619349,
"name":"Breach Candy, Mumbai",
"cod":200
}
这是我得到的错误
File "<ipython-input-3-a5896a25aff8>", line 16, in <module>
search(r, 'Rain') #prints firstName
File "<ipython-input-3-a5896a25aff8>", line 9, in search
for v in values[k]:
TypeError: 'int' object is not iterable
如果您只查找特定键,则不要尝试迭代其他所有键。你传入了整个字典,而不仅仅是r['weather']
列表。
如果rain
和Rain
都应该计算,你还需要小写该值。
接下来,我将返回一个布尔值,这是“是”或“否”问题的标准答案。打印时,可以随意将该值转换为'1'
或'0'
:
def weather_search(response, keyword):
"""Searches the weather main and description fields for given keyword"""
keyword = keyword.lower()
for entry in response['weather']:
for key in ('main', 'description'):
if keyword in entry.get(key, '').lower():
return True
# nothing found
return False
# printing 1 or 0
print('1' if weather_search(r, 'rain') else '0')