字典推导式是python中创建字典并同步筛选或转换数据的简洁高效语法,基本形式为{key_expr: value_expr for item in iterable},支持条件过滤、zip配对、嵌套展开及函数动态生成键值。

如果您想在Python中快速创建字典并同时完成数据筛选或转换,则可以使用字典推导式。这是一种简洁、高效的语法结构,其基本形式与列表推导式类似,但使用花括号和键值对表达式。以下是几种典型写法及对应的应用场景:
一、基础语法结构
字典推导式通过一个可迭代对象生成键值对,其通用格式为 {key_expr: value_expr for item in iterable},其中 key_expr 和 value_expr 可分别基于 item 进行计算。该结构等价于循环中反复执行 dict[key] = value 的操作,但更紧凑且可读性更高。
1、定义一个列表 fruits = ['apple', 'banana', 'cherry']。
2、使用推导式生成以水果名为键、长度为值的字典:{f: len(f) for f in fruits}。
立即学习“Python免费学习笔记(深入)”;
3、执行后得到结果:{'apple': 5, 'banana': 6, 'cherry': 6}。
二、带条件过滤的字典推导式
可在推导式末尾添加 if 子句,实现对输入项的筛选,仅将满足条件的元素纳入最终字典。这适用于需要排除无效键、跳过空值或按规则截取数据的情形。
1、给定字典 scores = {'Alice': 85, 'Bob': 42, 'Charlie': 91, 'Diana': 37}。
2、构建仅包含及格(≥60)学生成绩的新字典:{name: score for name, score in scores.items() if score >= 60}。
3、输出结果为:{'Alice': 85, 'Charlie': 91}。
三、从两个序列构造字典
当拥有两个独立的可迭代对象(如两个列表),且需将其按位置配对生成键值映射时,可结合 zip 函数使用字典推导式。该方式避免了显式索引访问,也无需预先构造元组列表。
1、准备键列表 keys = ['name', 'age', 'city'] 和值列表 values = ['Leo', 28, 'Shanghai']。
2、执行推导式:{k: v for k, v in zip(keys, values)}。
3、生成字典:{'name': 'Leo', 'age': 28, 'city': 'Shanghai'}。
四、嵌套结构中的字典推导式
在处理嵌套数据(如列表中包含字典)时,可通过多层 for 子句展开结构,并提取所需字段组合成新字典。这种写法适合扁平化层级、重命名字段或聚合特定属性。
1、设有数据 data = [{'id': 1, 'tags': ['python', 'web']}, {'id': 2, 'tags': ['data', 'ml']}]。
2、生成以 id 为键、tags 列表长度为值的映射:{item['id']: len(item['tags']) for item in data}。
3、结果为:{1: 2, 2: 2}。
五、使用函数或表达式动态生成键或值
键和值均可调用函数或参与运算,例如对键进行大小写转换、对数值做平方处理、或用格式化字符串构造复合键名。这种方式增强了推导式的灵活性和表达能力。
1、有原始字典 original = {'a': 2, 'b': 3, 'c': 4}。
2、生成键转大写、值取平方的新字典:{k.upper(): v**2 for k, v in original.items()}。
3、结果是:{'A': 4, 'B': 9, 'C': 16}。










