上QQ阅读APP看书,第一时间看更新
3.2.7 字典提取
在字典的实际应用中,有时为满足某些需求,我们需要将一个字典中满足某些条件的子集构造成一个新的字典。
实现该操作最简单的方式是使用字典推导,示例如下:
score_dict = { 'math': 95.0, 'java': 90.5, 'python': 100.0, 'sql': 93.0, 'english': 75.5 } # Make a dictionary of all score over 92 p1 = {key: value for key, value in score_dict.items() if value > 92} print(p1) # Make a dictionary of tech skill tech_names = {'python', 'sql', 'java'} p2 = {key: value for key, value in score_dict.items() if key in tech_names} print(p2)
对于大多数字典提取的情况,字典推导是能做到的。除此之外,我们还可以通过创建一个元组序列,然后把它传给dict()函数来实现,示例如下:
p1 = dict((key, value) for key, value in score_dict.items() if value > 92)
由代码示例看到,字典推导方式表意更清晰,并且运行更快(在这个例子中,实际测试几乎比dict()函数方式快整整一倍)。
有时候完成同一件事有多种方式。比如,第二个例子程序也可以重写,代码如下:
# Make a dictionary of tech skill tech_names = {'python', 'sql', 'java'} p2 = {key:score_dict[key] for key in score_dict.keys() & tech_names}
不过,运行时间大概比字典推导方式慢。如果对程序运行性能要求比较高,我们需要花点时间去做性能测试。