Python判断dictA是否包含dictB

Python判断dictA是否包含dictB(dictB是dictA的子集):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
dict1 = {
"a": 1,
"b": 2,
"c": 3
}

dict2 = {
"a": 1,
"b": 2
}

dict3 = {
"a": 1,
"b": 3
}

dict4 = {
"a": 1,
"d": 4
}

dict5 = {
"a": 1,
"b": 2,
"c": 3
}

def dict_contains(c_dict, f_dict):
return all(item in f_dict.items() for item in c_dict.items())

if __name__ == '__main__':
print("====== Python3+使用 d1.items() <= d2.items() =======")
print("dict1包含dict2:", dict2.items() <= dict1.items()) # 子集在前,父集在后
print("dict1包含dict3:", dict3.items() <= dict1.items())
print("dict1包含dict4:", dict4.items() <= dict1.items())
print("dict1包含dict5:", dict5.items() <= dict1.items())
print("dict2包含dict1:", dict1.items() <= dict2.items())
print("====== Python2使用 all(item in d2.items() for item in d1.items()) =======")
print("dict1包含dict2:", dict_contains(dict2, dict1))
print("dict1包含dict3:", dict_contains(dict3, dict1))
print("dict1包含dict4:", dict_contains(dict4, dict1))
print("dict1包含dict5:", dict_contains(dict5, dict1))
print("dict2包含dict1:", dict_contains(dict1, dict2))

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
====== Python3+使用 d1.items() <= d2.items() =======
dict1包含dict2: True
dict1包含dict3: False
dict1包含dict4: False
dict1包含dict5: True
dict2包含dict1: False
====== Python2使用 all(item in d2.items() for item in d1.items()) =======
dict1包含dict2: True
dict1包含dict3: False
dict1包含dict4: False
dict1包含dict5: True
dict2包含dict1: False