2017-02-17 53 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 
相關問題