从JSON数据中我获得了一个复杂的字典结构。假设我想获取温度等值,我可以通过指定一些键来访问它。
},
"t": {
"v": -4.1}
temp = float(json_object['data']['iaqi']['t']['v'])
有时这些数据可能没有说" t"我得到了一个KeyError。所以我想使用字典.get()方法来避免这种情况,但它只需要2个参数。有没有办法可以使用4键的方法?或者我可以尝试一种替代KeyError问题的方法吗?
答案 0 :(得分:1)
您可以对.get()
之前获得的最后一个元素应用't'
。想象一下:
a = {'a' : { 'b' : [1, 2]}}
a['a'].get('b') # Returns [1, 2]
a['a'].get('c') # Empty
在您的情况下,您可以使用:
json_object['data']['iaqi'].get('t')
从最后一行开始,如果您尝试访问['v']
,您将收到AttributeError。您可以按如下方式嵌套:
json_object['data']['iaqi'].get('t', {}).get('v')
# ^------- will create an empty dict if 't' is not found
答案 1 :(得分:1)
你可以这样做:
In [69]: d
Out[69]: {'iaqi': {'t': {'v': -4.1}}}
In [70]: d.get('iaqi').get('t').get('v')
Out[70]: -4.1
In [71]: d.get('iaqi').get('a').get('v')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-71-9f601d1c1fe4> in <module>()
----> 1 d.get('iaqi').get('a').get('v')
AttributeError: 'NoneType' object has no attribute 'get'
In [72]:
不存在的密钥的非类型错误仍然会使您处于相同的情况。
我建议使用try / except块:
In [73]: try:
...: print d['iaqi']['t']['v']
...: except KeyError:
...: print "I handle this my way"
...:
-4.1
In [74]: try:
...: print d['iaqi']['a']['v']
...: except KeyError:
...: print "I handle this my way"
...:
I handle this my way