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
有更好的方法吗?或者,也许是一种更加抒情的方式,因为这看起来并不像。
答案 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()):
# ...