我们想依据字典中的键或值过滤字典。
解决方案
可以利用字典推导式(dictionary compehension)轻松解决。例如:
代码语言:javascript复制prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
# 依据值过滤
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}
讨论
大多数情况下,字典推导式可以解决的问题也可以通过创建元组然后将其传递给 dict() 函数解决。例如:
代码语言:javascript复制p1 = dict((key, value) for key, value in prices.items() if value > 200
但是,字典推导式方案更为清晰,其运行速度也要快很多。
有时候,完成同一件事情可以有多种方法。例如解决方案中的第二个例子可以重写成:
代码语言:javascript复制# 依据键过程
tech_names = { 'AAPL', 'IBM', 'HPQ', 'MSFT' }
p2 = { key:prices[key] for key in prices.keys() & tech_names }
但根据实践,这种方案的速度也比较慢。在平时的使用过程中,采用最开始的方法就可以了。
参考
- 《Python Cookbook》第三版
- http://python3-cookbook.readthedocs.org/zh_CN/latest/