【发布时间】:2019-02-20 17:21:42
【问题描述】:
比如说,我们有以下字典:
dict1 = {a:b, b:c}
dict2 = {b:c, c:d}
交叉两个字典的键最有效的方法是什么?
当然,可以使用set(dict1.keys()).intersection(set(dict2.keys())),但我认为首先将字典转换为集合根本没有效率。
【问题讨论】:
标签: python python-3.x dictionary
比如说,我们有以下字典:
dict1 = {a:b, b:c}
dict2 = {b:c, c:d}
交叉两个字典的键最有效的方法是什么?
当然,可以使用set(dict1.keys()).intersection(set(dict2.keys())),但我认为首先将字典转换为集合根本没有效率。
【问题讨论】:
标签: python python-3.x dictionary
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 对象默认会遍历其键。
【讨论】:
keys 是一个视图,具有交集运算符
dict1.keys() & dict2.keys()
或者干脆
dict1.keys() & dict2
【讨论】: