测试Python字典相等性的方法如下:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois"}
print(first == second) # Result: True
但现在我的第二个字典包含一些我想要忽略的额外键:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois", "foo":"bar"}
有没有一种简单的方法来测试第一个字典是否是第二个字典的一部分,包括它的所有键和值?
编辑1:
这个问题被怀疑是如何测试字典是否包含特定的键的重复,但我想测试键和它们的值。仅包含相同的键并不意味着两个字典相等。
编辑2:
好的,现在我已经得到了四种不同方法的答案,并证明了它们都可以工作。因为我需要一个快速的过程,所以我测试了每个执行时间。我创建了三个具有1000个项的相同字典,键和值是长度为10的随机字符串。第二个和第三个字典添加了一些额外的键值对,并且第三个字典的最后一个非额外键添加了一个新值。所以,第一个字典是第二个字典的子集,但不是第三个字典的子集。使用10000次重复的timeit
模块,我得到:
Method Time [s]
first.viewitems() <=second.viewitems() 0.9
set(first.items()).issubset(second.items()) 7.3
len(set(first.items()) & set(second.items())) == len(first) 8.5
all(first[key] == second.get(key, sentinel) for key in first) 6.0
我猜最后一种方法是最慢的,但它排名第二。 但方法1胜过所有其他方法。
感谢您的回答!