Python - 检查是否存在“子字典”

3
A = {
    'a': 1,
    'b': 2,
    'c': 3
}

B = {
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4
}

我的目标是检查A是否为B的“子字典”。这意味着A中每个键值对都在B中。这是我的尝试:

def is_sub_dict(first_dict, second_dict):
    for x in first_dict:
        if x not in second_dict or first_dict[x] != second_dict[x]:
            return False
    return True

is_sub_dict(A, B) #True
is_sub_dict(B, A) #False

有更好的方法吗?或者,也许有一种更符合Python风格的方式,因为这个方法似乎不是很好。

3个回答

8

从字典元组创建一个集合(set),然后测试该集合是否为其他项目元组的子集。

def is_subset(A,B):
   return set(A.items()).issubset(B.items())

创建后,set 保证非常快的查找速度。

(如果需要使用相同的A重复执行操作,最好将 set(A.items()) 缓存以获得更好的性能)

这是因为字典的值是可哈希的。如果它们不是,那么传统的all(x in y for ...) 方法是另一个选择(请参见其他答案)。


5

看这里

all(item in B.items() for item in A.items())

希望这能对你有所帮助!


4
如何呢:
def is_subset(a, b):
    return all(item in b for item in a)

然后简单地执行以下步骤:
if is_subset(A.items(), B.items()):
   # ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接