Python Dictionary 字典

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。

延伸閱讀