Python - 检查"子字典"

时间:2018-04-18 16:01:43

标签: python python-3.x python-2.7 dictionary key

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

有更好的方法吗?或者,也许是一种更加抒情的方式,因为这看起来并不像。

3 个答案:

答案 0 :(得分:8)

从dict元组创建set然后测试该集是否是其他项元组的子集

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

创建后,set可确保快速查找。

(如果必须使用相同的A重复操作,最好“缓存”set(A.items())以获得更好的性能)

它有效,因为字典的值是 hashable 。如果不是,则旧的all(x in y for ...)方法是另一种选择(参见其他答案)。

答案 1 :(得分:4)

检查出来

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

希望它能帮到你!!

答案 2 :(得分:4)

怎么样:

def is_subset(a, b):
    return all(item in b for item in a)

然后简单地说:

if is_subset(A.items(), B.items()):
   # ...