检查一个字典是否至少有一个键在另一个字典中存在

2 投票
2 回答
1815 浏览
提问于 2025-04-28 13:40

我想检查一个字典中是否至少有一个键在另一个字典中存在。
我已经知道怎么检查一些“必须”的键,像这样:

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)

这里的data是一个字典的列表。用这段代码,只有同时包含key1和key2的项目会被添加到valid_data中。

有没有类似这样的东西:

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

如果所需的任何键存在的话,也能成功呢?

暂无标签

2 个回答

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

这样做会非常高效,因为只要找到一个共同的元素,它就会立刻返回结果。

6

使用 集合交集

needed_keys = {key1, key2}

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

只有当 needed_keys 这个集合和字典之间没有共享的键时,交集才会是空的。

注意,你的 any(...) 函数也可以用,但效率没有集合交集高;也许你没有意识到 any() 函数其实是存在的?

撰写回答