Python字典推导式与集合推导式:从基础到高级的全面指南

字典推导式(Dictionary Comprehension)和集合推导式(Set Comprehension)是Python中两种强大而优雅的数据结构构建方式。它们继承了列表推导式的简洁语法特点,同时针对字典和集合的特性进行了优化。本文将深入探讨这两种推导式的使用场景、高级技巧和性能优化。

1. 推导式基础回顾

1.1 三种推导式对比

特性 列表推导式 字典推导式 集合推导式
语法 [x for x in iter] {k:v for k,v in iter} {x for x in iter}
返回值类型 list dict set
元素特性 有序,可重复 键唯一,值可重复 无序,唯一
内存占用 中等 中等 取决于元素唯一性
典型用途 数据转换/过滤 键值对转换 去重/集合运算

1.2 基本语法结构

字典推导式

{
   
   key_expression: value_expression for item in iterable if condition}

集合推导式

{
   
   expression for item in iterable if condition}

2. 字典推导式深度解析

2.1 基础转换示例

# 列表转字典
fruits = ['apple', 'banana', 'cherry']
fruit_lengths = {
   
   fruit: len(fruit) for fruit in fruits}
# 结果:{'apple': 5, 'banana': 6, 'cherry': 6}

# 键值交换
original_dict = {
   
   'a': 1, 'b': 2, 'c': 3}
reversed_dict = {
   
   v: k for k, v in original_dict.items()}
# 结果:{1: 'a', 2: 'b', 3: 'c'}

2.2 条件过滤

# 只保留值为奇数的项
original = {
   
   'a': 1, 'b': 2, 'c': 3, 'd': 4}
filtered = {
   
   k: v for k, v in original.items() if v % 2 != 0}
# 结果:{'a': 1, 'c': 3}

2.3 键值转换

# 键转为大写,值平方
original = {
   
   'a': 1, 'b': 2, 'c': 3}
transformed = {
   
   k.upper(): v**2 for k, v in original.items()}
# 结果:{'A': 1, 'B': 4, 'C': 9}

2.4 多数据源合并

# 两个列表合并为字典
keys = ['name', 'age', 'gender']
values = ['Alice', 25, 'Female']
person = {
   
   keys[i]: values[i] for i in range(len(keys))}
# 结果:{'name': 'Alice', 'age': 25, 'gender': 'Female'}

3. 集合推导式实战应用

3.1 基础去重示例

# 列表去重
numbers = [1, 2, 2, 3, 4, 4, 4, 5]
unique_numbers = {
   
   num for num in numbers}
# 结果:{1, 2, 3, 4, 5}

3.2 复杂条件过滤

# 找出1-100中既是3的倍数又是5的倍数的数
special_numbers = {
   
   x for x in range(1, 101) if x % 3 == 0 and x % 5 == 0}
# 结果:{15, 30, 45, 60, 75, 90}

3.3 多集合运算

# 找出两个列表共有的单词
list1 = ["python", "java", "c++", "javascript"]
list2 = ["python", "ruby", "perl", "javascript"]
common_words = {
   
   word for word in list1} & {
   
   word for word in list2}
# 结果:{'python', 'javascript'}

4. 高级应用场景

4.1 字典键值反转(处理冲突)

# 处理值重复的情况
original = {
   
   'a': 1, 'b': 2, 'c': 2, 'd': 3}
reversed_dict = {
   
   }
for k, v in original.items()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻南瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值