我在列表中有几个嵌套字典,我需要验证是否存在特定路径例如
dict1['layer1']['layer2'][0]['layer3']
如果路径有效,我如何检查IF语句?
我在考虑
if dict1['layer1']['layer2'][0]['layer3'] :
但它不起作用
答案 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