2017-02-17 54 views
0

从JSON数据中,我获得了一个复杂的字典结构。假设我想获得温度等数值,我可以通过指定多个键来访问这些数值。使用.get()获取具有多个键的字典值

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

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

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

+0

你要什么'temp'是在这种情况下? – schwobaseggl

回答

1

您可以对't'之前获得的最后一个元素应用.get()。想象一下:

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 
+0

完美!虽然有什么办法,我可以有一个空字符串作为默认值。如果我有''代替{}或在{}内,我会收到一条错误消息。 – Paulos

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 
相关问题