2015-04-24 146 views
5

我有一個嵌套的OrderedDict,我要解開一個值超出。但在我能提取這個價值之前,我必須確保存在一長串屬性,並且它們的價值觀不是無。檢查是否嵌套屬性存在

什麼是改善了下面的代碼的最Python的方式:

if 'first' in data and \ 
    data['first'] and \ 
    'second' in data['first'] and \ 
    data['first']['second'] and \ 
    'third' in data['first']['second'] and \ 
    data['first']['second']['third']: 
    x = data['first']['second']['third'] 

回答

7

另一種途徑是使用get()方法:

x = data.get('first', {}).get('second', {}).get('third', None) 

如果在任何時候的鍵不存在,那麼x = None

+0

這是不行的。例如'數據= {「第一」:{「第二」:無}} '' – rob

2

你可以用try/except塊來包圍它,如下所示:

01如果其中一個字段設置爲無
try: 
    x = data['first']['second']['third'] 
    assert x 
except KeyError, AssertionError: 
    pass 
+1

應該assert'此處無法使用 – vaultah

+0

嗯,他想確保值不爲None,因此它的存在的原因。 – IcarianComplex

+0

我是否需要爲每個額外的任務另設一個try catch塊?例如。 'x = data ['a']'和'y = data ['b']'。 –