Python进阶编程:编写更高效、优雅的Python代码
上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}

不过,运行时间大概比字典推导方式慢。如果对程序运行性能要求比较高,我们需要花点时间去做性能测试。