Python - 检查"subdictionary"

thi*_*ien 3 python dictionary key python-2.7 python-3.x

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

B = {
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4
}
Run Code Online (Sandbox Code Playgroud)

我的目标是检查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
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?或者,也许是一种更加pythonic的方式,因为这肯定不像它.

Jea*_*bre 8

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

def is_subset(A,B):
   return set(A.items()).issubset(B.items())
Run Code Online (Sandbox Code Playgroud)

创建后,set保证快速查找.

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

它的工作原理是因为字典的值是可以清除的.如果不是,那么好的旧all(x in y for ...)方法是另一种选择(见其他答案).


小智 5

看一下这个

all(item in B.items() for item in A.items())
Run Code Online (Sandbox Code Playgroud)

希望它能帮助你!