字典推导式(Dictionary Comprehension)和集合推导式(Set Comprehension)是Python中两种强大而优雅的数据结构构建方式。它们继承了列表推导式的简洁语法特点,同时针对字典和集合的特性进行了优化。本文将深入探讨这两种推导式的使用场景、高级技巧和性能优化。
特性 | 列表推导式 | 字典推导式 | 集合推导式 |
---|---|---|---|
语法 | [x for x in iter] |
{k:v for k,v in iter} |
{x for x in iter} |
返回值类型 | list | dict | set |
元素特性 | 有序,可重复 | 键唯一,值可重复 | 无序,唯一 |
内存占用 | 中等 | 中等 | 取决于元素唯一性 |
典型用途 | 数据转换/过滤 | 键值对转换 | 去重/集合运算 |
字典推导式:
{
key_expression: value_expression for item in iterable if condition}
集合推导式:
{
expression for item in iterable if condition}
# 列表转字典
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'}
# 只保留值为奇数的项
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}
# 键转为大写,值平方
original = {
'a': 1, 'b': 2, 'c': 3}
transformed = {
k.upper(): v**2 for k, v in original.items()}
# 结果:{'A': 1, 'B': 4, 'C': 9}
# 两个列表合并为字典
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'}
# 列表去重
numbers = [1, 2, 2, 3, 4, 4, 4, 5]
unique_numbers = {
num for num in numbers}
# 结果:{1, 2, 3, 4, 5}
# 找出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}
# 找出两个列表共有的单词
list1 = ["python", "java", "c++", "javascript"]
list2 = ["python", "ruby", "perl", "javascript"]
common_words = {
word for word in list1} & {
word for word in list2}
# 结果:{'python', 'javascript'}
# 处理值重复的情况
original = {
'a': 1, 'b': 2, 'c': 2, 'd': 3}
reversed_dict = {
}
for k