python - Python-如果在 JSON 中找不到元素,则用 0 更新值
问题描述
我有一个读取 JSON 文件结构并提取 Off_peak、Peak 和 Shoulder 价格的代码。有一些 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.Example of API 更新它
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
解决方案
我认为没有必要使这一点复杂化,只需将所有 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
推荐阅读
- php - 我应该在 laravel 中的哪里存储私有证书文件?
- vue.js - 不能在 nuxt.js 中使用 vue-start-rating?
- c - 指针和结构类型的大小看似不一致的原因是什么?
- latex - 使用带有 \onslide\visible\only 的 Tikz 定位在投影仪内
- java - Microsoft Graph Java SDK - 无法读取共享点上的共享文件
- javascript - 在 Javascript 中重置倒数计时器
- reactjs - 进度条直接到100%
- flutter - Flutter StompClient 报错 初始化器中只能访问静态成员
- reactjs - 更改后未重新渲染反应状态
- javascript - Uppy - 可以顺序上传吗?