Python Dictionary(Python Dictionary)
這篇 Python Dictionary 教學將帶你認識字典:以鍵值對(key-value)儲存資料的容器。List 用「位置」找資料,Dictionary 用「名字」找資料——就像查字典,給一個詞(key)馬上得到解釋(value),不管資料多大查詢速度都極快。
建立 Dictionary
用大括號 {},每組資料寫成 key: value:
student = {
"name": "小明",
"age": 25,
"scores": [80, 95, 88] # value 可以是任何型別
}
print(student)
print(len(student)) # 鍵值對數量
執行輸出:
{'name': '小明', 'age': 25, 'scores': [80, 95, 88]}
3
key 必須是不可變型別(字串、數字、Tuple),且不能重複;value 沒有限制。
取值、新增、修改、刪除
student = {"name": "小明", "age": 25}
print(student["name"]) # 用 key 取值
student["age"] = 26 # 修改既有的 key
student["city"] = "台北" # key 不存在就是新增
print(student)
del student["city"] # 刪除
print(student)
執行輸出:
小明
{'name': '小明', 'age': 26, 'city': '台北'}
{'name': '小明', 'age': 26}
用 get() 安全取值
用 [] 取不存在的 key 會直接報 KeyError,get() 則回傳 None 或你指定的預設值:
student = {"name": "小明", "age": 25}
print(student.get("city")) # 不存在回傳 None
print(student.get("city", "未填寫")) # 指定預設值
執行輸出:
None
未填寫
常用方法總覽
| 方法 | 說明 |
|---|---|
get(key, default) | 安全取值,不存在回傳預設值 |
keys() | 所有的 key |
values() | 所有的 value |
items() | 所有的 (key, value) 對 |
pop(key) | 取出並刪除指定 key |
update(d) | 用另一個字典批次更新 |
key in dict | 檢查 key 是否存在 |
走訪 Dictionary
items() 搭配解包是最常用的走訪方式:
scores = {"國文": 85, "英文": 92, "數學": 78}
for subject, score in scores.items():
print(f"{subject}:{score} 分")
print("英文" in scores) # 檢查 key 是否存在
執行輸出:
國文:85 分
英文:92 分
數學:78 分
True
巢狀 Dictionary
value 放字典就能表達更複雜的結構,JSON 資料就是這個形式(第 33 篇會用到):
students = {
"s001": {"name": "小明", "age": 25},
"s002": {"name": "小華", "age": 23},
}
print(students["s001"]["name"]) # 一層層取值
執行輸出:
小明
常見錯誤
1. KeyError: ‘xxx’
用 [] 取不存在的 key。不確定 key 是否存在時,改用 get() 或先用 in 檢查。
2. TypeError: unhashable type: ‘list’
用 List 當 key({[1,2]: "x"})。key 必須是不可變型別,要用序列當 key 改用 Tuple。
3. 走訪時修改字典
在 for key in d: 的迴圈中對 d 新增或刪除 key 會報 RuntimeError。先把要刪的 key 收集起來,迴圈結束後再刪,或走訪 list(d.keys()) 的複本。
總結
Dictionary 用 {key: value} 建立,[] 取值修改、get() 安全取值、items() 走訪、in 檢查存在;key 不可重複且必須是不可變型別。它是 Python 使用頻率最高的結構之一,後面學 JSON、API 都會大量用到。下一篇介紹專門處理「不重複」資料的 Set。