测试字典是否包含在字典中。

22 浏览
0 Comments

测试字典是否包含在字典中。

对于Python字典,使用以下代码可以很好地测试相等性:

first  = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois"}
print(first == second) # 结果:True

但是现在我的第二个字典包含了一些我想忽略的额外键:

first  = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois", "foo":"bar"}

有没有一种简单的方法来测试第一个字典是否是第二个字典的一部分,包括所有的键和值?

编辑1:

这个问题被怀疑是如何测试字典是否包含特定键的重复问题,但我对测试键及其值感兴趣。只包含相同的键并不意味着两个字典相等。

编辑2:

好的,现在我得到了四种不同方法的答案,并且证明它们都有效。由于我需要一个快速的过程,我测试了每种方法的执行时间。我创建了三个具有1000个项目的相同字典,键和值是长度为10的随机字符串。第二个和第三个字典都有一些额外的键值对,而第三个字典的最后一个非额外键有一个新值。因此,第一个字典是第二个字典的子集,但不是第三个字典的子集。使用10000次重复的timeit模块,我得到了以下结果:

方法                                                      时间 [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击败了它们所有。

谢谢你们的回答!

0