当前位置:首页>python>Python 字典推导式必学案例,看完直接上手

Python 字典推导式必学案例,看完直接上手

  • 2026-10-11 07:18:25
Python 字典推导式必学案例,看完直接上手

字典推导式是 Python 极简高效的语法,能一行代码快速生成、筛选、转换字典,替代冗长的 for 循环,日常开发、数据处理高频使用。

本文整理入门→进阶→实战全场景案例,零基础也能看懂,建议收藏备用。

一、基础语法回顾

标准格式

{键表达式: 值表达式 for 变量 in 可迭代对象}

带条件筛选格式

{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}

核心逻辑:遍历可迭代对象,按规则生成键值对,支持条件过滤、键值修改、数据转换。


二、入门基础案例(新手必练)

案例1:基础生成字典(数值映射)

需求:生成 {1:10, 2:20, 3:30 ... 10:100} 字典 传统循环写法:

dic = {}
for i in range(1, 11):
    dic[i] = i * 10
print(dic)

字典推导式一行实现:

dic = {i: i*10for i in range(1, 11)}
print(dic)
# 输出:{1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90, 10: 100}

案例2:列表转字典(两两配对)

需求:两个列表,一个做键、一个做值,合并为字典

keys = ["name", "age", "gender"]
values = ["小明", 20, "男"]

# 推导式 + zip 配对
new_dic = {k: v for k, v in zip(keys, values)}
print(new_dic)
# 输出:{'name': '小明', 'age': 20, 'gender': '男'}

三、条件筛选案例(最常用)

案例3:筛选字典(保留符合条件的键值对)

原始字典:学生成绩,只保留分数大于80分的学生

score = {"张三": 75, "李四": 92, "王五": 88, "赵六": 60}

# 条件筛选:值 > 80
high_score = {name: s for name, s in score.items() if s > 80}
print(high_score)
# 输出:{'李四': 92, '王五': 88}

案例4:过滤指定键(剔除无用字段)

需求:剔除字典中 age 键,保留其他数据

user = {"id": 101, "name": "小红", "age": 18, "city": "北京"}
new_user = {k: v for k, v in user.items() if k != "age"}
print(new_user)
# 输出:{'id': 101, 'name': '小红', 'city': '北京'}

四、键/值修改转换(进阶用法)

案例5:字典键值互换

适用场景:反向查询、数据反转

old_dic = {"a": 1, "b": 2, "c": 3}
# 键 ↔ 值 互换
new_dic = {v: k for k, v in old_dic.items()}
print(new_dic)
# 输出:{1: 'a', 2: 'b', 3: 'c'}

注意:值不能重复,重复值会导致数据丢失。

案例6:统一修改所有值(批量运算)

需求:给所有成绩 +5 分

score = {"语文": 80, "数学": 90, "英语": 85}
new_score = {k: v+5for k, v in score.items()}
print(new_score)
# 输出:{'语文': 85, '数学': 95, '英语': 90}

案例7:键名统一格式化

需求:把所有键转为大写字母

data = {"apple": 10, "banana": 20, "orange": 15}
new_data = {k.upper(): v for k, v in data.items()}
print(new_data)
# 输出:{'APPLE': 10, 'BANANA': 20, 'ORANGE': 15}

五、多层嵌套/复杂实战案例(工作常用)

案例8:嵌套列表转字典

需求:二维列表,转为标准字典

data_list = [["姓名", "小李"], ["职位", "程序员"], ["薪资", 8000]]
dic = {item[0]: item[1] for item in data_list}
print(dic)
# 输出:{'姓名': '小李', '职位': '程序员', '薪资': 8000}

案例9:多条件组合筛选

需求:筛选薪资大于7000 且 职位是程序员的员工

staff = {
"员工A": {"job": "程序员", "salary": 7500},
"员工B": {"job": "运营", "salary": 6000},
"员工C": {"job": "程序员", "salary": 8500}
}

res = {k: v for k, v in staff.items() if v["job"] == "程序员"and v["salary"] > 7000}
print(res)
# 输出:{'员工A': {'job': '程序员', 'salary': 7500}, '员工C': {'job': '程序员', 'salary': 8500}}

案例10:去重并统计元素出现次数

简易词频统计(入门版)

words = ["python", "java", "python", "go", "java", "python"]
# 遍历去重,统计次数
word_count = {w: words.count(w) for w in set(words)}
print(word_count)
# 输出:{'python': 3, 'java': 2, 'go': 1}

六、易错点提醒(避坑指南)

  1. 键必须不可变列表、字典不能做字典的键,会直接报错,优先使用字符串、数字、元组。
  2. 键重复会覆盖推导式中如果生成相同键,后面的键值会覆盖前面的数据。
  3. 键值互换慎用原字典值重复时,互换后会丢失数据,提前检查数据。
  4. 不要过度嵌套推导式追求简洁,多层嵌套会降低代码可读性,复杂逻辑建议用普通循环。

七、总结

字典推导式是 Python 语法糖的核心之一,核心优势:

  • 代码极简,一行替代多行循环
  • 执行效率高于普通 for 循环
  • 数据筛选、转换、重构场景全覆盖

以上10个案例覆盖入门、筛选、转换、实战四大场景,日常写代码、数据处理、爬虫、接口开发都能直接套用。


最新文章

随机文章