我想检查嵌套字典中是否存在键元组,类似于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:这些行有时写起来很有趣。但老实说,我会在任何生产代码中使用您的版本。

07-24 13:12