我有一个代码,其中JSON文件结构是读取和Off_peak,峰值和肩部价格提取。有一些JSON,其中所有的元素都存在,而其中一些只有Peak和Off_Peak,而没有肩部。
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示例
API - https://api.energymadeeasy.gov.au/plans/dpids/AMA62448MBE1?postcode=4000例如,有一个文件,它有Off_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发布于 2020-09-16 12:33:32
我认为没有必要使这个问题复杂化,只需将所有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发布于 2020-09-16 12:23:10
使用“三元条件”如何?这一行写着如果这个不是那个。
即,如果找到,则将数据输入变量,否则输入0
像这样使用
test = True if 10+10 == 20 else 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,还没有测试过呢!
https://stackoverflow.com/questions/63913055
复制相似问题