2016-11-23 88 views
1

所以基本上我通過嵌套的字典extension遍歷像這樣:檢查嵌套的字典項存在

extension['value1']['value2']['value3']['value4'] 

但是,有時字典文件可以是有點不同:

extension['value1']['value2']['blah1']['value4'] 

如何我可以解釋這種情況嗎?我不必擔心大量場景,關鍵將只有value3blah1

回答

2

你可以寫一個函數來獲取第一個存在的關鍵:

def get_first_item(items, keys): 
    for k in keys: 
     if k in items: 
      return items[k] 

    raise KeyError 

,然後用它是這樣的:

get_first_item(extension['value1']['value2'], ['value3', 'blah1'])['value4'] 
2

您必須明確檢查key,然後獲取其值。例如:

optional_keys = ['value3', 'blah1'] 
value = None 

for optional_key in optional_keys: 
    if optional_key in extension['value1']['value2']: 
     value = extension['value1']['value2'][optional_key]['value4'] 
     break 
+1

謝謝你,你要跟都張貼在基本相同的時間,所以我不得不接受一個,我去了Ryans,因爲它看起來更直觀一些。我很欣賞這種反應,但總是很好,有不同的方法:) –

2

我覺得上面的兩個答案可以很好地解決你的問題。由於您的關鍵將是要麼value3blah1,而不是一個功能,你不妨使用下面的代碼,當你遍歷詞典:

try: 
    value = extension['value1']['value2']['value3']['value4'] 
except Exception as e: # except KeyError: 
    # print(e) 
    value = extension['value1']['value2']['blah1']['value4'] 
+0

考慮到只有兩個鍵可能會有所不同,它將工作。 –