Python 字典推导式使用技巧总结

9次阅读

Python 字典推导式使用技巧总结

字典推导式是 python 中简洁高效构建字典的利器,用好了能大幅减少冗余代码,提升可读性与执行效率。关键在于理解其结构、善用条件过滤、注意键的唯一性,并避免副作用。

基础语法与常见写法

字典推导式基本形式为:{key_expr: value_expr for item in iterable}。它等价于一个 for 循环加多次 dict[key] = value,但更紧凑。

  • 从列表生成映射: {x: x**2 for x in [2, 3, 4]}{2: 4, 3: 9, 4: 16}
  • 字符串构建字符索引: {ch: i for i, ch in enumerate('abc')}{'a': 0, 'b': 1, 'c': 2}
  • 注意键必须可哈希,{[x]: x for x in [1]} 会报 TypeError

带条件过滤的推导式

可在推导式末尾添加 if 子句进行筛选,只对满足条件的元素生成键值对。

  • 过滤偶数并平方:{x: x**2 for x in range(10) if x % 2 == 0}{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
  • 跳过空值或 None:{k: v for k, v in data.items() if v is not None}
  • 支持单 if,不支持 if-else 作为过滤条件;若需分支赋值,把 if-else 放在 value_expr 或 key_expr 中(见下条)

键或值使用条件表达式(三元操作)

当需要根据条件动态决定键或值内容时,把 value if condition else other_value 写在对应表达式位置。

立即学习Python免费学习笔记(深入)”;

  • 统一小写键名,但保留原始值:{k.lower(): v for k, v in {'Name': 'Alice', 'AGE': 30}.items()}
  • 值做类型转换或默认处理:{k: int(v) if v.isdigit() else 0 for k, v in {'a': '12', 'b': 'xx'}.items()}
  • 键也可参与逻辑:{(k if k.isalpha() else f'key_{i}'): v for i, (k, v) in enumerate(items)}

嵌套与组合场景实用技巧

复杂结构可通过多层推导或结合其他内置函数实现,但需权衡可读性。

  • 反转字典(要求原值可哈希且唯一):{v: k for k, v in original.items()}
  • 按某字段分组聚合(配合 defaultdict 更清晰,但推导式可初筛):{k: [x for x in data if x['cat'] == k] for k in set(x['cat'] for x in data)}
  • 避免在推导式中调用有副作用的函数(如 print()、修改外部变量),因其执行时机和次数不易控制

字典推导式不是万能的,嵌套过深或逻辑复杂时,显式循环反而更易维护。核心是:保持表达式纯、键唯一、条件明确、不依赖执行顺序。

text=ZqhQzanResources