本节书摘来自异步社区《Python Cookbook(第3版)中文版》一书中的第1章,第1.17节,作者[美]David Beazley , Brian K.Jones,陈舸 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.17 从字典中提取子集
1.17.1 问题
我们想创建一个字典,其本身是另一个字典的子集。
1.17.2 解决方案
利用字典推导式(dictionary comprehension)可轻松解决。例如:
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# Make a dictionary of all prices over 200
p1 = { key:value for key, value in prices.items() if value > 200 }
# Make a dictionary of tech stocks
tech_names = { 'AAPL', 'IBM', 'HPQ', 'MSFT' }
p2 = { key:value for key,value in prices.items() if key in tech_names }
1.17.3 讨论
大部分可以用字典推导式解决的问题也可以通过创建元组序列然后将它们传给dict()函数来完成。例如:
p1 = dict((key, value) for key, value in prices.items() if value > 200)
但是字典推导式的方案更加清晰,而且实际运行起来也要快很多(以本例中的字典prices来测试,效率要高2倍多)。
有时候会有多种方法来完成同一件事情。例如,第二个例子还可以重写成:
# Make a dictionary of tech stocks
tech_names = { 'AAPL', 'IBM', 'HPQ', 'MSFT' }
p2 = { key:prices[key] for key in prices.keys() & tech_names }