字典推導式:Python中用推導式快速創建字典

字典推導式是Python中一種簡潔高效的創建字典的方式,它允許我們通過一行代碼快速生成符合特定規則的字典。如果你熟悉列表推導式,那麼字典推導式的理解會非常輕鬆,因爲它們的語法結構類似,只是生成的是鍵值對而非單個元素。

1. 爲什麼需要字典推導式?

在介紹推導式之前,我們先回顧一下傳統的字典創建方式。比如,要生成一個包含1到5的平方的字典:

# 傳統方法:初始化空字典,循環賦值
squares = {}
for num in range(1, 6):
    squares[num] = num **2
print(squares)  # 輸出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

這種方法需要幾行代碼,如果數據量很大或規則複雜,會顯得繁瑣。而字典推導式可以將這個過程壓縮成一行,讓代碼更簡潔。

2. 字典推導式的基本語法

字典推導式的核心結構是:
{鍵表達式: 值表達式 for 變量 in 可迭代對象 [if 條件表達式]}

  • 鍵表達式:生成字典的“鍵”,可以是變量、函數調用或運算結果。
  • 值表達式:生成字典的“值”,同樣可以是變量、函數調用或運算結果。
  • 可迭代對象:如列表、元組、range等可以循環的對象。
  • if條件表達式(可選):用於過濾需要保留的元素,不滿足條件的會被排除。

3. 從簡單例子開始學

例子1:生成簡單鍵值對

假設我們有一個列表['a', 'b', 'c'],想生成一個鍵爲列表元素、值爲0的字典:

keys = ['a', 'b', 'c']
result = {key: 0 for key in keys}
print(result)  # 輸出:{'a': 0, 'b': 0, 'c': 0}

這裏,key是循環變量,key: 0是鍵值對的表達式,遍歷列表keys生成每個鍵值對。

例子2:值爲計算結果

如果值需要是鍵的平方(如1:12:4),只需修改值表達式:

numbers = [1, 2, 3, 4]
squares = {num: num** 2 for num in numbers}
print(squares)  # 輸出:{1: 1, 2: 4, 3: 9, 4: 16}

這裏num **2就是值的計算,生成每個數字的平方作爲值。

例子3:帶條件過濾

如果只想保留滿足條件的鍵值對,比如只保留偶數的鍵:

numbers = [1, 2, 3, 4, 5, 6]
even_squares = {num: num** 2 for num in numbers if num % 2 == 0}
print(even_squares)  # 輸出:{2: 4, 4: 16, 6: 36}

條件if num % 2 == 0會過濾掉奇數,只保留偶數的鍵值對。

4. 進階:從其他可迭代對象生成字典

字典推導式不僅可以從列表生成,還可以從元組、range等可迭代對象生成。例如:

# 從元組生成字典
items = (('name', 'Alice'), ('age', 25), ('city', 'Beijing'))
person = {k: v for k, v in items}
print(person)  # 輸出:{'name': 'Alice', 'age': 25, 'city': 'Beijing'}

# 從range生成字典(鍵是1-5,值是鍵的立方)
cubes = {num: num **3 for num in range(1, 6)}
print(cubes)  # 輸出:{1: 1, 2: 8, 3: 27, 4: 64, 5: 125}

5. 注意:區分不同推導式

初學者常混淆三種推導式:
- 列表推導式[表達式 for 變量 in 可迭代對象](結果是列表)
- 字典推導式{鍵: 值 for 變量 in 可迭代對象}(結果是字典)
- 集合推導式{表達式 for 變量 in 可迭代對象}(結果是集合,無重複元素)

例如:

# 列表推導式
print([num for num in range(1, 4)])  # [1, 2, 3]

# 字典推導式
print({num: num**2 for num in range(1, 4)})  # {1: 1, 2: 4, 3: 9}

# 集合推導式
print({num**2 for num in range(1, 4)})  # {1, 4, 9}

6. 總結:字典推導式的優勢

  • 簡潔性:一行代碼完成複雜邏輯,避免重複的循環和賦值。
  • 可讀性:直接表達“鍵值對生成規則”,比傳統循環更直觀。
  • 效率:內部優化,比手動循環更高效(尤其數據量大時)。

字典推導式是Python中處理字典生成的利器,掌握它能讓你的代碼更簡潔、更專業。建議初學者多練習從簡單列表生成字典,再逐步嘗試帶條件過濾和複雜表達式的場景,很快就能熟練運用啦!

小夜