我有一个包含多个键和值的字典,其中一个包含更多词典的列表。我需要确定那些字典中是否存在给定值,但是我不确定当它们不仅存在于列表中而且存在于对象属性中时,如何对其进行检查。
尽管for循环检查可以完成此操作,但该属性最终可能保留数百个值,这会使此方法效率低下。
我还尝试了以下方法的变体:
if <value> in <dict>[<list>][<dict2>]
但是,我不断收到TypeErrors,列表索引必须是整数或切片(值是字符串)。
代码示例为:
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...")
(我无法上传实际的代码,但这大致就是我所面临的。)
预期的输出将是代码运行没有错误,并且可以成功地找到该值是否在嵌套字典中。
答案 0 :(得分:2)
一个示例是使用内置的any函数,该函数会在找到第一个匹配项时短路。但是,有几种选择
if not any("007" in x["value"] for x in dictExample["Check_Me"]):
print("It works!")
答案 1 :(得分:0)
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'
的所有值。答案 2 :(得分:0)
您可能需要递归:
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))
或更复杂的内容。使用递归可以使您更加灵活地掌握数据层次结构的深度。