在嵌套字典中查找无值的位置

时间:2017-09-15 15:14:05

标签: python python-3.x dictionary

我需要在可能深度嵌套的字典中识别任何None值,该字典也可以包含列表。下面是我现在存在的代码。它有效,但它只返回与None值直接关联的键的名称。

我想让整个键列表指向None
(例如nested["top_key"]["next_key"]["final_key"]

def search_for_None(nested):
    for key, value in nested.items():
        if isinstance(value, dict):
            search_for_None(value)
        elif isinstance(value, list):
            for item in value:
                if isinstance(item, dict):
                    search_for_None(item)
        else:
            if value is None:
                logging.error("Missing value for key '{0}'".format(key))

1 个答案:

答案 0 :(得分:0)

您需要传递路径以及递归调用。像下面的东西

def search_for_None(nested, path):
    for key, value in nested.items():
        dict_path = f"{path}[{key!r}]"
        if isinstance(value, dict):
            search_for_None(value, dict_path)
        elif isinstance(value, list):
            for index, item in enumerate(value):
                list_path = f"{dict_path}[{index!r}]"
                if isinstance(item, dict):
                    search_for_None(item, list_path)
        else:
            if value is None:
                logging.error("Missing value for key '{0}'".format(dict_path))

path参数应该是一个字符串(例如“嵌套”)

另请注意,您发布的代码(以及我的代码)在列表中找不到None值(例如{“a”:[None]}),因为没有检查该条件。