检查dict中是否至少包含一个dict键

时间:2014-10-20 13:59:47

标签: python validation dictionary

我想检查另一个dict中是否有至少一个来自给定字典的密钥。 我已经知道如何检查"必须" -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)

数据在这里是一个dicts列表。使用此代码时,只有包含key1和key2的项目才会附加到valid_data。

是否有类似的东西:

if not any(key in d for key in needed_keys)

如果所需密钥中的任何密钥可用,它也会成功吗?

2 个答案:

答案 0 :(得分:6)

使用set intersections

needed_keys = {key1, key2}

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

如果needed_keys集和字典之间没有共享密钥,则交集仅为空。

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

答案 1 :(得分:1)

让我们说你的数据是这样的

>>> d1, d2 = {"a" : 1, "b" : 2, "c" : 3}, {"b" : 1, "c" : 2, "d" : 3}

首先,将所需的键定义为一组。让我们说,

>>> needed_keys = {"a", "b", "d"}

现在,您只需检查字典键和needed_keys是否至少有一个共同的项目,set.isdisjoint设置操作,就像这样

>>> [item for item in (d1, d2) if not needed_keys.isdisjoint(item)]

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