2016-11-23 87 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

考虑到只有两个键可能会有所不同,它将工作。 –