【问题标题】:Efficient dictionary key intersection [duplicate]高效的字典键交集[重复]
【发布时间】: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


    【解决方案1】:

    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 对象默认会遍历其键。

    【讨论】:

      【解决方案2】:

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

      dict1.keys() & dict2.keys()
      

      或者干脆

      dict1.keys() & dict2
      

      【讨论】:

        猜你喜欢
        • 2018-06-11
        • 2019-06-25
        • 2018-04-15
        • 1970-01-01
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        相关资源
        最近更新 更多