开发者社区> 问答> 正文

在filter()中使用has_key()的最快方法?

我知道这是python 2中一种非常有效的方式,可以交叉2个词典

filter(dict_1.has_key, dict_2.keys())
但是has_key()从Python3中删除了,所以我无法真正使用快速filter()和has_key()功能。我现在正在做的是:

[key for key in dict_2 if key in dict_1]

展开
收起
一码平川MACHEL 2019-01-21 11:24:35 1770 0
1 条回答
写回答
取消 提交回答
  • 您可以在Python 3.x中使用运算符,而不是在Python 2 中。有了filter,它在3.x中提供了一个迭代器,你可以使用dict.__contains__。也没有必要调试dict.keys:

    res = filter(dict_1.__contains__, dict_2) # lazy

    print(list(res))

    [2, 3]

    一种等效但不太美观lambda的解决方案:

    res = filter(lambda x: x in dict_1, dict_2) # lazy
    生成器表达式是第三种选择:

    res = (x for x in dict_2 if ix in dict_1) # lazy
    对于非惰性方法,您可以使用set.intersection:

    res = set(dict_1) & set(dict_2) # {2, 3}


    可以这样做:

    d1 = {1 : 1, 2 : 2}
    d2 = {1 : 3, 2 : 4, 3 : 5}

    common = list(d1.keys() & d2.keys())
    print(common)
    产出
    [1, 2]

    2019-07-17 23:26:04
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多