你有这个用途
.get
方法而不是
[...]
检索值的语法。这允许您为缺失案例添加默认值。
但是,由于您是用硬编码的dict查询构建的,因此必须级联
get
s用于嵌套字段检索,如果可靠的话,这可能会变得很长。
而且
收到
不检查序列中的元素:尝试从空序列检索索引0处的元素也会出错。
所以
data[symbol]['financials']['financials'][0]['netIncome']
必须成为
(((d3 if (d3:=d2[0].get("netIncome")) else "N/A")if d2 else "N/A" )if (d2:=d1.get('financials') else "N/A") if (d1:=data[symbol].get('financials')) else "N/A"
可以清楚地看到,即使是像您这样的中等结构,这也不可行。最好的方法是构建一个helper函数,从数据的“路径”中检索嵌套数据,默认为一个值,并每次调用该函数:
def retr(obj, path, default="N/A"):
try:
for index in path:
obj = obj[index]
except (IndexError, KeyError):
return default
return obj
他们会打电话给
retr
要组成每个数据项,请执行以下操作:
data[symbol]['financials']['financials'][0]['cashFlow'],
变成:
retr(data, ["symbol", "financials", "financials", 0 ,"cashFlow"]),