使用.get()获取具有多个键

时间:2017-02-17 15:10:25

标签: python dictionary

从JSON数据中我获得了一个复杂的字典结构。假设我想获取温度等值,我可以通过指定一些键来访问它。

},
   "t": {
    "v": -4.1}

temp = float(json_object['data']['iaqi']['t']['v'])

有时这些数据可能没有说" t"我得到了一个KeyError。所以我想使用字典.get()方法来避免这种情况,但它只需要2个参数。有没有办法可以使用4键的方法?或者我可以尝试一种替代KeyError问题的方法吗?

2 个答案:

答案 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