Python-如果在JSON中找不到元素,则使用0更新该值

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'][

我有一段代码,其中读取JSON文件结构,并提取非峰值、峰值和肩部价格。 有一些JSON,其中所有元素都存在,而其中一些只有峰值和非峰值,但没有肩部

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是的,如果用
分隔,则可以在
中添加多个条件