首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python-如果在JSON中找不到元素,则使用0更新值

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

Stack Overflow用户
提问于 2020-09-16 12:17:18
回答 2查看 40关注 0票数 2

我有一个代码,其中JSON文件结构是读取和Off_peak,峰值和肩部价格提取。有一些JSON,其中所有的元素都存在,而其中一些只有Peak和Off_Peak,而没有肩部。

代码语言:javascript
复制
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示例

代码语言:javascript
复制
API - https://api.energymadeeasy.gov.au/plans/dpids/AMA62448MBE1?postcode=4000

例如,有一个文件,它有Off_Peak和峰值,但肩部变量保持为空,但如果找不到,我想用0更新它。我尝试了下面的代码,但它不工作。

代码语言:javascript
复制
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

预期输出

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-16 12:33:32

我认为没有必要使这个问题复杂化,只需将所有3个变量的初始值设置为0即可。如果找到该值,则重新设置该值,否则它将保持为0-

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-09-16 12:23:10

使用“三元条件”如何?这一行写着如果这个不是那个。

即,如果找到,则将数据输入变量,否则输入0

像这样使用

test = True if 10+10 == 20 else False

代码语言:javascript
复制
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,还没有测试过呢!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63913055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档