【问题标题】:How to check if all values is not None in dict continent list and dict with different format如何检查dict大陆列表和不同格式的dict中的所有值是否不是None
【发布时间】:2022-09-25 17:54:57
【问题描述】:

我想检查 dict 是否包含 value None 知道格式不是唯一的它可以 dict 内容其他 dict 和其他列表包含 dict 你可以看到这个例子:

{
    \"first_name\": \"test\",
    \"last_name\": \"test\",
    \"cars\": [
        {\"mark\": \"test\", \"type\": \"12\"},
        {\"mark\": \"test2\", \"type\": \"7\"},
    ],
    \"date_created\": \"2022-05-07\",
    \"invoice_info\": {
        \"price\": 1233,
        \"currency\": \"EUR\",
        \"date\": [
            {\"date_1\": \"2022-05-07\", \"info\": {\"comment\": \"test\", \"place\": \"France\"}},
            {\"date_2\": \"2022-06-12\", \"info\": {\"comment\": None, \"place\": \"France\"}},
        ]

    }
}
  • 请使用您尝试过的代码更新您的问题。

标签: python list dictionary for-loop


【解决方案1】:

您必须使用递归函数。如果函数接收到字典或列表,它会循环遍历这些值 - 否则将值与None 进行比较。这是一个简单的例子:

data = {"foo": "bar"}

def includes_none(node):
    if isinstance(node, dict):
        for _, v in node.items():
            if includes_none(v):
                return True
    elif isinstance(node, list):
        for v in node:
            if includes_none(v):
                return True
    else:
        if node is None:
            return True
    return False

print(includes_none(data))

【讨论】:

  • 不同的情况可以简化为return any(includes_none(v) for v in node.values()) 等。
【解决方案2】:

这里的最低代码;)

def seekNone(node):
    if (isinstance(node, dict) or isinstance(node, list)):
        try:
            node = node.values()
        except: 
            pass
        for val in node:
            if seekNone(val):
                return True
    return node is None


print(seekNone(your_dict_here))

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多