当前位置:首页>python>一文吃透 Python 字典推导式:从入门到精通,10个经典案例直接抄

一文吃透 Python 字典推导式:从入门到精通,10个经典案例直接抄

  • 2026-09-02 23:07:06
一文吃透 Python 字典推导式:从入门到精通,10个经典案例直接抄

大家在写 Python 时,是不是经常遇到批量创建字典、过滤字典数据、快速转换字典结构的场景? 如果还在傻傻用 for 循环一行行写,代码又长又乱,可读性还差!

今天给大家带来字典推导式最全讲解 + 10个经典实战案例,语法简单、代码简洁、执行高效,新手也能秒懂,直接复制就能用,非常适合发朋友圈、收藏学习!

一、先搞懂:什么是字典推导式?

字典推导式是 Python 独有的极简语法,用一行代码快速生成/处理字典,替代多行 for 循环,核心语法:

# 基础格式
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件表达式}
  • 最外层:{} 字典符号
  • 中间:键:值 是字典核心
  • 后面:for 循环遍历数据
  • 可选:if 过滤数据(不加就是无条件生成)

对比传统循环,差距一目了然:

# 传统循环:生成 {1:1, 2:4, 3:9...10:100}
dict1 = {}
for i in range(1,11):
    dict1[i] = i**2

# 字典推导式:一行搞定
dict1 = {i: i**2for i in range(1,11)}

代码直接精简80%,优雅又好读!


二、核心分类:4大类经典场景(附详细案例)

我把字典推导式分成最常用的4类,从简单到进阶,工作中90%的场景都能用。

第一类:基础生成 —— 快速创建新字典

适合:直接根据列表、range等生成全新字典。

案例1:数字键 + 平方值(最基础入门)

需求:生成键1-10,值为对应数字平方的字典

# 推导式
num_dict = {i: i**2for i in range(1, 11)}
print(num_dict)
# 输出:{1: 1, 2: 4, 3: 9, ..., 10: 100}

✅ 说明:i 是键,i**2 是值,循环1-10直接生成。

案例2:列表转字典(键值一一对应)

需求:两个列表,一个存姓名,一个存年龄,快速转字典

names = ["小明", "小红", "小刚"]
ages = [18, 19, 20]

# 推导式(zip打包两个列表)
user_dict = {name: age for name, age in zip(names, ages)}
print(user_dict)
# 输出:{'小明': 18, '小红': 19, '小刚': 20}

✅ 说明:zip() 把两个列表打包成一对一对数据,推导式直接转字典。

案例3:字符串生成字典(字符: ASCII码)

str_dict = {char: ord(char) for char in"python"}
print(str_dict)
# 输出:{'p': 112, 'y': 121, ..., 'n': 110}

第二类:带条件过滤 —— 筛选字典数据

适合:从现有字典/列表中,只保留符合条件的键值对,是工作中最常用的场景!

案例4:筛选值大于指定数字的字典项

需求:保留成绩大于80分的学生

scores = {"小明": 75, "小红": 92, "小刚": 88, "小丽": 65}

# 推导式:值 > 80 才保留
high_scores = {name: score for name, score in scores.items() if score > 80}
print(high_scores)
# 输出:{'小红': 92, '小刚': 88}

✅ 关键点:if score > 80 就是过滤条件。

案例5:筛选指定开头的键

需求:只保留键以小开头的字典项

users = {"小王": 20, "老张": 30, "小李": 25, "老赵": 35}
res = {k: v for k, v in users.items() if k.startswith("小")}
# 输出:{'小王': 20, '小李': 25}

案例6:多条件过滤(值>50 且 键长度=2)

data = {"苹果": 60, "香蕉": 40, "橙子": 70, "西瓜": 30}
res = {k: v for k, v in data.items() if v > 50and len(k) == 2}
# 输出:{'苹果': 60, '橙子': 70}

第三类:键值修改/转换 —— 批量处理字典

适合:不改变数据量,只修改键、修改值、键值互换。

案例7:字典键值互换(高频面试题)

需求:把{键:值} 变成 {值:键}

original = {"a": 1, "b": 2, "c": 3}
reverse_dict = {v: k for k, v in original.items()}
print(reverse_dict)
# 输出:{1: 'a', 2: 'b', 3: 'c'}

✅ 注意:如果值有重复,后面会覆盖前面,仅限值唯一的场景。

案例8:批量修改值(统一计算/格式化)

需求:所有价格打8折

prices = {"可乐": 5, "薯片": 8, "面包": 10}
new_prices = {k: round(v*0.8, 2) for k, v in prices.items()}
# 输出:{'可乐': 4.0, '薯片': 6.4, '面包': 8.0}

案例9:批量修改键(大写/小写/加前缀)

需求:所有键变成大写

old_dict = {"name": "小明", "age": 18}
new_dict = {k.upper(): v for k, v in old_dict.items()}
# 输出:{'NAME': '小明', 'AGE': 18}

第四类:进阶嵌套 —— 处理复杂字典

适合:处理字典里套列表、套字典的复杂数据,爬虫、数据分析常用。

案例10:嵌套数据提取(进阶必学)

需求:从嵌套字典中,提取指定字段

# 原始嵌套数据
students = [
    {"name": "小明", "score": 90},
    {"name": "小红", "score": 95},
    {"name": "小刚", "score": 85}
]

# 推导式:提取 姓名:成绩
student_dict = {stu["name"]: stu["score"] for stu in students}
print(student_dict)
# 输出:{'小明': 90, '小红': 95, '小刚': 85}

三、避坑指南:3个新手常犯错误

  1. 忘记用 items()遍历字典必须写 dict.items(),直接写 dict 只会遍历键,会报错!

    # 错误
    {k:v for k,v in scores}
    # 正确
    {k:v for k,v in scores.items()}
  2. 值重复导致键覆盖字典键唯一,若推导式生成重复键,后面会覆盖前面的数据。

  3. 过度使用推导式逻辑超过3层的复杂推导式,可读性会变差,不如用普通循环。


四、总结:什么时候用字典推导式?

  1. 快速生成字典 ✅
  2. 过滤字典数据 ✅
  3. 批量修改键/值 ✅
  4. 键值互换、结构转换 ✅
  5. 替代多行for循环,让代码更简洁 ✅

看完这篇,你可以:

  • 一行代码搞定字典生成/过滤/转换
  • 告别冗长的for循环,代码优雅高级
  • 面试、工作直接用,提升效率

建议大家收藏+复制代码动手练一遍,字典推导式绝对是 Python 进阶的必备技能!

最新文章

随机文章