CH06 · 學習導覽

字典

鍵值映射、雜湊表,與用鍵取值
Python 程式設計 · 滄海二版 CH06 · 導覽(完整內容見 PDF 講義)
map · 字典的定位

字典:用「鍵」取值

串列 / 元組
序號取值:L[0]。元素有排位順序。
字典 dict
取值:d['Java聖經']。元素是鍵值組合,無序號。

字典每個元素是一組 鍵: 值(key-value pair),數學上叫映射 mapping。鍵唯一、值可重複。

key idea · 招牌

字典是雜湊表

鍵 key → 雜湊直達 → 值 value 很快
值 value → 逐一比對 → 鍵 key 慢(沒捷徑)

鍵→值有雜湊表直達;值→鍵只能用迴圈逐一掃。這也是鍵要唯一、用簡單型別的原因。

build · 三種建立

建立字典

大括號
{'k': v, ...}
最常用
dict()
dict([['k', v]])
傳鍵值對串列
多行
一行一組鍵值
可讀性好

字典無序:印出不保證照輸入順序,也不能用序號取值。

get · 取值兩條路

[鍵] 還是 .get()?

d[鍵]
找不到鍵 → KeyError 中斷程式。
確定鍵存在時用。
d.get(鍵, 預設)
找不到 → 回預設值(沒給就 None),不報錯
不確定鍵在不在時用。
edit · 增刪改

新增、修改、刪除

操作效果
d[鍵] = 值鍵不存在 → 新增;存在 → 修改
d.setdefault(鍵, 值)鍵不存在才新增;存在則不動
del d[鍵]刪一組鍵值
del d刪整個字典變數!之後 NameError
d.clear()清空成 {}
iterate · 列舉三法

走訪字典

.keys()
所有鍵
for k in d: 預設就是走鍵
.values()
所有值
sum(d.values()) 加總
.items()
所有 (鍵,值)
for k,v in d.items():
copy · 複製

= 別名 vs .copy() 獨立

b = d
別名:同一個字典。
改 b,d 跟著變。is → True
b = d.copy()
真複製:獨立字典。
改 b 不影響 d。is → False

延續 CH05「變數是名牌」:字典是可變物件,= 只貼第二張名牌。.update() 則用來合併兩個字典(重複鍵覆蓋)。

checklist · 考前掃描

最容易掉的點

  • d[不存在鍵]KeyError;不確定就用 .get(鍵, 預設)
  • del d(漏給鍵)會刪掉整個字典,之後 NameError
  • 字典無序,不能用 d[0] 取「第一個」。
  • .get() 不改字典;.setdefault() 在鍵不存在時會新增。
  • = 是別名(連動),要獨立用 .copy()
  • 值→鍵要 for 逐一比對;重複鍵後者覆蓋;鍵要不可變型別。
next · 學習閉環

接下來怎麼練

這份 slides
導覽
PDF 講義
學細節
index
Pyodide 試跑
本地練習
自己寫
測驗卷
≥ 90%

追蹤任何字典操作:先想是鍵→值(快)還是值→鍵(慢)、會不會 KeyError、是別名還是複製。