美文网首页PythonPython
Python 使用字典推导从字典中提取子集

Python 使用字典推导从字典中提取子集

作者: 大梦三千秋 | 来源:发表于2020-05-15 18:01 被阅读0次

    使用字典推导从字典中提取子集


    问题


    构造一个字典,而这个字典是另外一个字典的子集

    解决方案


    这里提供的方法是使用字典推导。示例代码如下:

    prices = {
        'ACME': 45.23,
        'AAPL': 612.78,
        'IBM': 205.55,
        'HPQ': 37.20,
        'FB': 10.75
    }
    
    # 创建价格超过 200 的字典
    p1 = {key: value for key, value in prices.items() if value > 200}
    # 创建原有数据中为科技股的股票的字典
    tech_names = {'AAPL', 'IBM', 'HPQ', 'MSFT'}
    p2 = {key: value for key, value in prices.items() if key in tech_names}
    
    print(p1)
    # {'AAPL': 612.78, 'IBM': 205.55}
    print(p2)
    # {'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.2}
    

    代码解析


    上面代码中,使用字典推导完成的部分,可以用另外的方法实现,示例如下:

    p1 = dict((key, value) for key, value in prices.items() if value > 200)
    

    相比较之下,字典推导式更加简洁,实际上运行速率也更快些。(下面是利用 jupyter notebook 进行的测试,推导式比 dict() 函数方式快了快整整一倍)

    %timeit p1 = {key: value for key, value in prices.items() if value > 200}
    # 672 ns ± 5.28 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    
    %timeit p1 = dict((key, value) for key, value in prices.items() if value > 200)
    # 1.23 µs ± 4.05 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
    

    完成一个任务,有多种方式。但如果对运行性能要求高的话,需要花时间做计时测试。

    相关文章

      网友评论

        本文标题:Python 使用字典推导从字典中提取子集

        本文链接:https://www.haomeiwen.com/subject/wrkhohtx.html