高效的字典键交集

时间:2018-09-16 17:24:08

标签: python python-3.x dictionary

例如,我们有以下词典:

dict1 = {a:b, b:c}
dict2 = {b:c, c:d}

将两个字典的键相交的最有效方法是什么?

当然,一个人可以使用set(dict1.keys()).intersection(set(dict2.keys())),但我认为首先将字典转换为集合根本没有效率。

2 个答案:

答案 0 :(得分:9)

keys是一个视图,具有交点运算符

dict1.keys() & dict2.keys()

或者简单地

dict1.keys() & dict2

答案 1 :(得分:3)

dict.keys() view object支持设置操作:

dict1.keys() & dict2.keys()  # equivalent to set(dict1).intersection(dict2)

但是,对于较小的词典,使用集合可能会更快:

In [1]: dict1 = {'a': 'b', 'c': 'd'}

In [2]: dict2 = {'b': 'c', 'c': 'd'}

In [3]: %timeit dict1.keys() & dict2.keys()
448 ns ± 1.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)    

In [4]: %timeit set(dict1).intersection(dict2)
330 ns ± 0.602 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

请注意,set.intersection()接受任何可迭代作为参数,因此您可以将dict2传递给它。另外,默认情况下,无需将dict1.keys()作为dict对象调用就可以遍历其键。