我想检查嵌套字典中是否存在键元组,类似于dict.get
。该功能可以如下实现。
nested_dict = {
'x': 1,
'a': {
'b': {
'c': 2,
'y': 3
},
'z': 4
}
}
def check(nested, *path):
for key in path:
if isinstance(nested, dict) and key in nested:
nested = nested[key]
else:
return False
return True
check(nested_dict, 'a', 'b', 'c') # True
check(nested_dict, 'x') # True
check(nested_dict, 'a', 'b', 'y') # True
check(nested_dict, 'a', 'z') # True
check(nested_dict, 'y') # False
check(nested_dict, 'a', 'y') # False
check(nested_dict, 'a', 'b', 'c', 'y') # False
有没有一种更清洁(或更好的内置)方法?
最佳答案
对于python 3.x,请执行from functools import reduce
。
您可以包装try .. except KeyError
(和TypeError
)并返回适当的布尔值:
>>> reduce(lambda x,y: x[y], ["a", "b", "c"], nested_dict)
2
>>> reduce(lambda x,y: x[y], ["a", "b", "d"], nested_dict)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
KeyError: 'd'
PS:这些行有时写起来很有趣。但老实说,我会在任何生产代码中使用您的版本。