如何检查一个值是否存在于另一个字典的列表中的字典中?

2024-10-03 19:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个键和值的字典,其中一个包含多个字典的列表。我需要能够找到给定的值是否存在于这些字典中,但是我不确定当它们不仅存在于列表中,而且存在于对象属性中时,如何对它们进行检查。你知道吗

虽然for循环检查可以实现这一点,但属性最终可能会持有数百个值,这将使这种方法效率低下。你知道吗

我还尝试了以下几种: if <value> in <dict>[<list>][<dict2>]

但是,我不断得到类型错误,列表索引必须是整数或片(值是字符串)。你知道吗

代码示例如下:

dictExample = {
"name": "yes",
"age": 25,
"Check_Me": [
    {"type": "code", "value": "001"},
    {"type": "code", "value": "002"},
    {"type": "code", "value": "003"},
    {"type": "code", "value": "004"},
    {"type": "code", "value": "005"}
    ],
}

if "007" not in dictExample["Check_Me"]["value"]:
    print("It works!")
else:
    print("Failure...")

(我无法上传实际的代码,但这大致就是我面临的问题。)

预期的输出是代码运行时没有错误,并且能够成功地找到值是否在嵌套字典中。你知道吗


Tags: 对象代码in列表if字典属性value
3条回答

您可能需要递归:

def val_in_dict(my_val, the_dict):
    for value in the_dict.values():
        if my_val == value:
            return True
        elif isinstance(value, list):
            for element in value:
                if isinstance(element, dict) and val_in_dict(my_val, element):
                    return True
    return False
if val_in_dict("007", d):
    print("It works")

您可能还需要将上面的一行更改为isinstance(value, (list, tuple))或更复杂的内容。使用递归可以让您在数据层次结构的深度上更加灵活。你知道吗

dictExample = {
"name": "yes",
"age": 25,
"Check_Me": [
    {"type": "code", "value": "001"},
    {"type": "code", "value": "002"},
    {"type": "code", "value": "003"},
    {"type": "code", "value": "004"},
    {"type": "code", "value": "005"}
    ],
}
if "007" not in [d['value'] for d in dictExample['Check_Me']]:
    print("It works!")
else:
    print("Failure...")
  • 只需迭代Check_Me并从字典中获取键'value'的所有值。你知道吗

一个例子是使用内置的any函数,它在找到第一个匹配项时短路。不过,有几种选择

if not any("007" in x["value"] for x in dictExample["Check_Me"]):
    print("It works!")

相关问题 更多 >