如果我有一个元素,我试图从字典中获取:
my_dict[i]['level_1']['level_2']['my_var']
.
有没有比这样做更清晰的方法来检查空值?
if 'level_1' in my_dict[i]: if 'level_2' in my_dict[i]['level_1']: if 'my_var' in my_dict[i]['level_1']['level_2']: my_var = my_dict[i]['level_1']['level_2']['my_var']
Willem Van O.. 7
您可以简单地定义自己的:
def get_deep(dic,*keys,default=None): for key in keys: if isinstance(dic,dict) and key in dic: dic = dic[key] else: return default return dic
或者如果你想测试:
def in_deep(dic,*keys): for key in keys: if isinstance(dic,dict) and key in dic: dic = dic[key] else: return False return True
您可以使用此代码,如果它确实可以在字典中深入,in_deep(my_dict[i],'level1','level2','my_var')
它将返回True
.如果你想获得深度元素,你可以调用get_deep(my_dict[i],'level1','level2','my_var')
.get_deep
将返回default
参数(默认情况下None
),以防它无法到达路径.
您可以简单地定义自己的:
def get_deep(dic,*keys,default=None): for key in keys: if isinstance(dic,dict) and key in dic: dic = dic[key] else: return default return dic
或者如果你想测试:
def in_deep(dic,*keys): for key in keys: if isinstance(dic,dict) and key in dic: dic = dic[key] else: return False return True
您可以使用此代码,如果它确实可以在字典中深入,in_deep(my_dict[i],'level1','level2','my_var')
它将返回True
.如果你想获得深度元素,你可以调用get_deep(my_dict[i],'level1','level2','my_var')
.get_deep
将返回default
参数(默认情况下None
),以防它无法到达路径.