Python:检查嵌套字典是否存在

时间:2017-04-17 19:51:57

标签: python python-3.x

我在列表中有几个嵌套字典,我需要验证是否存在特定路径例如

dict1['layer1']['layer2'][0]['layer3']

如果路径有效,我如何检查IF语句?

我在考虑

if dict1['layer1']['layer2'][0]['layer3'] :

但它不起作用

4 个答案:

答案 0 :(得分:2)

以下是try/except的明确短代码:

try:
    dict1['layer1']['layer2'][0]['layer3']
except KeyError:
    present = False
else:
    present = True

if present: 
    ...

获取元素:

try:
    obj = dict1['layer1']['layer2'][0]['layer3']
except KeyError:
    obj = None  # or whatever

答案 1 :(得分:0)

据我所知,你必须一步一步地走,即:

if 'layer1' in dict1:
   if 'layer2' in dict1['layer1']

如此......

答案 2 :(得分:0)

如果您不想使用try/except路线,可以快速执行此操作:

def check_dict_path(d, *indices):
    sentinel = object()
    for index in indices:
        d = d.get(index, sentinel)
        if d is sentinel:
            return False
    return True


test_dict = {1: {'blah': {'blob': 4}}}

print check_dict_path(test_dict, 1, 'blah', 'blob') # True
print check_dict_path(test_dict, 1, 'blah', 'rob') # False

如果您还尝试在该位置检索对象(而不仅仅是验证该位置是否存在),这可能是多余的。如果是这种情况,可以相应地更新上述方法。

答案 3 :(得分:0)

这是我建议的答案的类似问题:

Elegant way to check if a nested key exists in a python dict