Python 字典推导式

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 中,除了字典有推导式语法之外,像列表、集合等都有推导式语法。另请参阅:

Python 列表推导式

Python 集合推导式

推导式语法可以让代码更加简洁,但在某些情况下,也会降低代码的可读性。因此在实际开发中,不要过度使用。

上一篇: Python 合并字典

下一篇: Python 字典排序

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号