Python 字典推导式语法
在 Python 中,我们可以使用 “推导式” 的方式来快速生成一个字典。这种方式叫做 “字典推导式” 或 “字典生成式”。
语法:
字典名 = {key: value for (key, value) in dictname.items() if condition}说明:
key 是键,value 是值,dict 是字典,condition 是判断条件。其中 if condition 是可以省略的。需要注意的是,if 判断只能放在字典推导式的最后,而不能放在最前面。
# 正确
字典名 = {key: value for (key, value) in dict if condition}
# 错误
字典名 = {if condition key: value for (key, value) in dict}字典推导式和 “列表推导式” 相似,也是通过循环和条件判断的配合来实现的,不同的是字典推导式返回的是一个字典,所以整个表达式需要写在 “{}” 内部。
提示: 在某些情况下,字典推导式可读性会比较差,此时可以考虑使用 for 循环来实现。
Python 字典推导式示例
接下来,我们通过几个简单的例子来讲解 Python 字典推导式是如何使用的。
示例 1:过滤字典
grades = {
'Jack': 92,
'Lucy': 88,
'Tony': 56,
'Lily': 75,
'Tim': 43
}
result = {key: value for (key, value) in grades.items() if value >= 60}
print(result)运行结果如下。
{'Jack': 92, 'Lucy': 88, 'Lily': 75}分析:
上面例子实现的功能是:过滤出所有成绩及格(>=60)的键值对,然后返回包含这些键值对的新字典。
对于上面例子来说,你也可以使用 for 循环来实现,代码如下。
grades = {
'Jack': 92,
'Lucy': 88,
'Tony': 56,
'Lily': 75,
'Tim': 43
}
result = {}
for key, value in grades.items():
if value >= 60:
result[key] = value
print(result)示例 2:变换字典
grades = {
'Jack': 92,
'Lucy': 88,
'Tony': 56,
'Lily': 75,
'Tim': 43
}
result = {key: value - 10 for (key, value) in grades.items()}
print(result)运行结果如下。
{'Jack': 82, 'Lucy': 78, 'Tony': 46, 'Lily': 65, 'Tim': 33}分析:
上面例子实现的功能是:将所有学生的成绩都减去 10,然后返回一个新字典。
对于上面例子来说,你也可以使用 for 循环来实现,代码如下。
grades = {
'Jack': 92,
'Lucy': 88,
'Tony': 56,
'Lily': 75,
'Tim': 43
}
result = {}
for key, value in grades.items():
result[key] = value - 10
print(result)示例 3:将列表转换为字典
items = [ ('a', 1), ('b', 2), ('c', 3) ]
result = {key: value for (key, value) in items}
print(result)运行结果如下。
{'a': 1, 'b': 2, 'c': 3}分析:
字典推导式其实是一个 “语法糖”。对于上面例子来说,你也可以使用 for 循环来实现。
items = [ ('a', 1), ('b', 2), ('c', 3) ]
result = {}
for key, value in items:
result[key] = value
print(result)示例 4:将两个列表合并成字典
names = ['Jack', 'Lucy', 'Tony']
ids = [1001, 1002, 1003]
result = { key: value for (key, value) in zip(names, ids) }
print(result)运行结果如下。
{'Jack': 1001, 'Lucy': 1002, 'Tony': 1003}分析:
zip() 是 Python 的一个内置函数,它可以接收多个可迭代对象(如列表)作为参数,然后将这些对象相同位置的元素组成一个个元组,最后返回由这些元组组成的可迭代对象。比如这里的 zip(names, ids) 内部其实是 [('Jack', 1001), ('Lucy', 1002), ('Tony', 1003)] 这样的数据。
Python 中的 “推导式” 语法
在 Python 中,除了字典有推导式语法之外,像列表、集合等都有推导式语法。另请参阅:
推导式语法可以让代码更加简洁,但在某些情况下,也会降低代码的可读性。因此在实际开发中,不要过度使用。
