Python-如果在JSON中找不到元素,则使用0更新该值
我有一段代码,其中读取JSON文件结构,并提取非峰值、峰值和肩部价格。 有一些JSON,其中所有元素都存在,而其中一些只有峰值和非峰值,但没有肩部Python-如果在JSON中找不到元素,则使用0更新该值,python,python-3.x,dataframe,Python,Python 3.x,Dataframe,我有一段代码,其中读取JSON文件结构,并提取非峰值、峰值和肩部价格。 有一些JSON,其中所有元素都存在,而其中一些只有峰值和非峰值,但没有肩部 try: for check in data[0]['planData']['contract'][0]['tariffPeriod'][0]['touBlock']: if "Off" in check['name']: Off_Peak = check['blockRate'][
try:
for check in data[0]['planData']['contract'][0]['tariffPeriod'][0]['touBlock']:
if "Off" in check['name']:
Off_Peak = check['blockRate'][0]['unitPrice']
elif "Peak" in check['name']:
Peak = check['blockRate'][0]['unitPrice']
elif "Shoulder" in check['name']:
Shoulder = check['blockRate'][0]['unitPrice']
except:
Off_Peak = ""
Peak = ""
Shoulder = ""
我的代码检查并更新变量中的所有元素,无论是否找到。但是,如果只找到了2个元素,那么找不到的元素就不会被更新,我想用0来更新它
API - https://api.energymadeeasy.gov.au/plans/dpids/AMA62448MBE1?postcode=4000
例如,有一个文件有Off_Peak和Peak,但肩部变量仍然为空,但如果找不到,我想用0更新它。我尝试了下面的代码,但它不工作
for check in data[0]['planData']['contract'][0]['tariffPeriod'][0]['touBlock']:
if "Off" in check['description']:
Off_Peak = check['blockRate'][0]['unitPrice']
print('Off_Peak',Off_Peak)
elif "Peak" in check['description']:
Peak = check['blockRate'][0]['unitPrice']
print('Peak',Peak)
elif "Shoulder" in check['description']:
Shoulder = check['blockRate'][0]['unitPrice']
print('Shoulder',Shoulder)
elif Off_Peak==None:
Off_Peak=0
elif Peak==None:
Peak=0
elif Shoulder==None:
Shoulder=0
预期产量
Plan_ID Post_Code Plan_Type Plan_Name Retailer_Name Retailer_Code Distributor_Name State Effective_Date Solar_Rate Discount_Type Discount Daily_Rate CL1 CL2 Single_Rate Off_Peak Peak Shoulder
AMA62448MBE1 4000 TOU amaysim Post-paid Electricity - Business amaysim Energy AMA Energex QLD 1/07/2020 8 136.8 21.9648 23.328 0
使用一个“三元条件”怎么样?它的一行写着“如果这个”或者“如果那个”
i、 e如果找到,则在变量中输入数据,否则输入0
像这样使用
test=True,如果10+10==20,则为False
for check in data[0]['planData']['contract'][0]['tariffPeriod'][0]['touBlock']:
Off_Peak = check['blockRate'][0]['unitPrice'] if "Off" in check['name'] else 0
Peak = check['blockRate'][0]['unitPrice'] if "Peak" in check['name'] else 0
Shoulder = check['blockRate'][0]['unitPrice'] if "Shoulder" in check['name'] else 0
编辑:
我刚看过你的API,根本没有测试过 我认为没有必要使这一点复杂化,只需将所有3个变量的初始值设置为0即可。如果找到该值,请再次设置它,否则它将保持为0-
Off_Peak = 0
Peak = 0
Shoulder = 0
try:
for check in data[0]['planData']['contract'][0]['tariffPeriod'][0]['touBlock']:
if "Off" in check['name']:
Off_Peak = check['blockRate'][0]['unitPrice']
elif "Peak" in check['name']:
Peak = check['blockRate'][0]['unitPrice']
elif "Shoulder" in check['name']:
Shoulder = check['blockRate'][0]['unitPrice']
except:
# No need to set it again, but not removing it
Off_Peak = 0
Peak = 0
Shoulder = 0
这将不起作用,因为
否则
条件将使我尝试的循环中的所有值都为0,但它不会给出所需的结果。对于每个名称,我都会检查文本中是否包含peak、off或肩部。0 0 21.9648 21.9648 21.9648谢谢你。让我试试。快速提问,我可以在if块中添加或吗。例如,如果复选框['name']中的“Off”或复选框['description']中的“Off”?否则我就得用elif?我想使用或函数,有时“name”或“description”中会出现Off是的,如果用或或和分隔,则可以在中添加多个条件