检查字典中是否至少包含一个字典

问题描述:

我想检查给定字典中是否至少有一个字符在另一个字典中可用。 我已经知道如何检查“必须” -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) 

也成功如果从所需的密钥的任何键可用?

+3

你有没有尝试过你的代码 - 函数“any”存在,并做你所需要的。 – 2014-10-20 14:01:45

使用set intersections

needed_keys = {key1, key2} 

for d in data: 
    if needed_keys.intersection(d): 
     valid_data.append(d) 

如果没有密钥在needed_keys集和词典之间共享的交叉点仅是​​空的。

请注意,您的any(...)函数也可以工作,只是不如集交集选项有效;也许你没有意识到any() function确实存在?

+0

同意交叉点。好和容易 – Anzel 2014-10-20 14:03:36

+0

谢谢,那工作。 – Igle 2014-10-20 14:10:36

比方说你的数据是这样的

>>> 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)] 

这将是非常有效的,因为如果它找到一个单一的公共元素,它将立即返回。