Python字典推導式和集合推導式
1. 字典推導式基礎
基本語法:
{key_expr: value_expr for item in iterable if condition}
# 基本字典推導式
# 創建平方數字典
squares = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 使用條件過濾
even_squares = {x: x**2 for x in range(10) if x % 2 == 0} # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
# 從現有字典創建新字典
prices = {'apple': 5, 'banana': 3, 'orange': 4}
discount_prices = {k: v*0.8 for k, v in prices.items()} # 所有商品打八折
2. 集合推導式基礎
基本語法:
{expr for item in iterable if condition}
# 基本集合推導式
# 創建平方數集合
square_set = {x**2 for x in range(5)} # {0, 1, 4, 9, 16}
# 從字符串創建集合
vowels = {char for char in 'hello world' if char in 'aeiou'} # {'e', 'o'}
# 過濾數字列表
numbers = [1, 2, 2, 3, 3, 4, 4, 5]
unique_evens = {x for x in numbers if x % 2 == 0} # {2, 4}
3. 實際應用範例
數據轉換和清理
# 將列表轉換為字典(索引作為鍵)
words = ['apple', 'banana', 'orange']
word_dict = {i: word for i, word in enumerate(words)}
# 清理字典數據
data = {'a': 1, 'b': None, 'c': 3, 'd': None}
cleaned = {k: v for k, v in data.items() if v is not None}
# 字符串處理
text = "Hello World"
char_count = {char: text.count(char) for char in set(text)}
數據分析應用
# 學生成績分類
scores = {'小明': 85, '小華': 92, '小芳': 78, '小美': 95}
grades = {name: 'A' if score >= 90 else 'B' if score >= 80 else 'C'
for name, score in scores.items()}
# 商品分類
products = {'蘋果': 5, '香蕉': 3, '橘子': 4, '葡萄': 8}
price_levels = {name: '貴' if price > 5 else '普通' if price > 3 else '便宜'
for name, price in products.items()}
4. 練習題
-
字典推導式練習:
- 創建一個字典,包含1-10的數字及其立方值
- 將溫度從攝氏轉換為華氏的對照表
- 統計一段文本中每個單詞的出現次數
-
集合推導式練習:
- 找出兩個列表中的共同元素
- 生成1-100中所有質數的集合
- 提取文本中所有的數字字符