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

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


问题


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

解决方案


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

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)

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

发布了52 篇原创文章 · 获赞 16 · 访问量 5741

猜你喜欢

转载自blog.csdn.net/weixin_45642918/article/details/103538384