检查字典中是否至少包含一个字典
问题描述:
我想检查给定字典中是否至少有一个字符在另一个字典中可用。 我已经知道如何检查“必须” -keys这样的:检查字典中是否至少包含一个字典
valid_data = []
needed_keys = (key1, key2)
for d in data:
if not all(key in d for key in needed_keys):
continue # ignore invalid object
valid_data.append(d)
数据是在这里类型的字典列表。通过此代码,只有包含key1和key2的项目才会附加到valid_data。
有什么样:
if not any(key in d for key in needed_keys)
也成功如果从所需的密钥的任何键可用?
答
needed_keys = {key1, key2}
for d in data:
if needed_keys.intersection(d):
valid_data.append(d)
如果没有密钥在needed_keys
集和词典之间共享的交叉点仅是空的。
请注意,您的any(...)
函数也可以工作,只是不如集交集选项有效;也许你没有意识到any()
function确实存在?
答
比方说你的数据是这样的
>>> d1, d2 = {"a" : 1, "b" : 2, "c" : 3}, {"b" : 1, "c" : 2, "d" : 3}
首先,定义所需的密钥为一组。比方说,
>>> needed_keys = {"a", "b", "d"}
现在,你可以简单地检查字典键和needed_keys
都有共同ATLEAST一个项目,与set.isdisjoint
设置操作,这样
>>> [item for item in (d1, d2) if not needed_keys.isdisjoint(item)]
这将是非常有效的,因为如果它找到一个单一的公共元素,它将立即返回。
你有没有尝试过你的代码 - 函数“any”存在,并做你所需要的。 – 2014-10-20 14:01:45