字典推导式是 Python 中极简、高效的语法糖,能用一行代码快速创建/转换字典,替代繁琐的 for 循环+赋值操作,让代码更简洁优雅。
今天整理 5 个工作/面试高频的经典案例,从基础到进阶,新手也能秒懂,直接收藏复用!
一、基础语法回顾
字典推导式核心格式:
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
- 优势:比传统 for 循环代码量减少 50%,可读性更强
二、经典案例 1:快速创建字典(替代手动赋值)
场景
已知键列表和值列表,快速合并为字典。
代码实现
# 传统写法(繁琐)
keys = ["姓名", "年龄", "城市"]
values = ["张三", 25, "北京"]
person = {}
for k, v in zip(keys, values):
person[k] = v
# 字典推导式(一行搞定)
person = {k: v for k, v in zip(keys, values)}
print(person)
# 输出:{'姓名': '张三', '年龄': 25, '城市': '北京'}
亮点
zip() 打包两个列表,推导式直接解包生成字典,告别循环模板代码。
三、经典案例 2:字典键值互换(高频实用场景)
场景
需要把字典的键和值颠倒(适用于值唯一的场景)。
代码实现
# 原字典:英文-中文映射
en_to_cn = {"name": "姓名", "age": "年龄", "city": "城市"}
# 推导式实现键值互换
cn_to_en = {v: k for k, v in en_to_cn.items()}
print(cn_to_en)
# 输出:{'姓名': 'name', '年龄': 'age', '城市': 'city'}
注意
如果原字典的值有重复,互换后后面的键会覆盖前面的,使用时确保值唯一。
四、经典案例 3:带条件过滤(筛选符合要求的键值对)
场景
从原字典中,只保留满足条件的键值对(比如筛选高分成绩、有效数据)。
代码实现
# 学生成绩字典
scores = {"小明": 88, "小红": 92, "小刚": 76, "小丽": 95}
# 需求:筛选出成绩 ≥90 分的学生
high_scores = {name: score for name, score in scores.items() if score >= 90}
print(high_scores)
# 输出:{'小红': 92, '小丽': 95}
扩展
还可以过滤键:{k:v for k,v in dic.items() if k.startswith("小")}
五、经典案例 4:值计算/格式化(一键处理字典值)
场景
对字典的值进行计算、单位转换、字符串格式化,批量处理数据。
代码实现
# 商品原价字典
prices = {"苹果": 10, "香蕉": 5, "橙子": 8}
# 需求:所有商品打 8 折,生成新字典
discount_prices = {fruit: price * 0.8for fruit, price in prices.items()}
print(discount_prices)
# 输出:{'苹果': 8.0, '香蕉': 4.0, '橙子': 6.4}
进阶格式化
# 给值添加单位
price_with_unit = {k: f"{v}元"for k, v in prices.items()}
# 输出:{'苹果': '10元', '香蕉': '5元', '橙子': '8元'}
六、经典案例 5:嵌套字典推导式(处理复杂数据)
场景
处理嵌套字典(如接口返回的 JSON 数据、多层配置),进阶必备。
代码实现
# 嵌套字典:班级-学生成绩
class_scores = {
"一班": {"小明": 85, "小红": 90},
"二班": {"小刚": 78, "小丽": 92}
}
# 需求:提取所有班级的最高分,生成新字典
max_scores = {cls: max(score.values()) for cls, score in class_scores.items()}
print(max_scores)
# 输出:{'一班': 90, '二班': 92}
亮点
一行代码搞定嵌套数据提取,比多层 for 循环简洁太多!
七、传统循环 VS 字典推导式(对比总结)
八、使用小贴士
- 复杂逻辑(多分支、多层判断):别强行用推导式,可读性优先
总结
- 字典推导式核心:
{键:值 for 循环 if 条件},一行生成字典 - 5 大经典场景:列表转字典、键值互换、条件过滤、值计算、嵌套处理
- 原则:简单逻辑用推导式,复杂逻辑用循环,兼顾简洁与可读性