使用字典推导从字典中提取子集
问题
构造一个字典,而这个字典是另外一个字典的子集
解决方案
这里提供的方法是使用字典推导。示例代码如下:
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)
完成一个任务,有多种方式。但如果对运行性能要求高的话,需要花时间做计时测试。
网友评论