Python 字典與集合
進階字典用鍵查值(phonebook["小明"]),get() 安全讀值,in 檢查鍵是否存在;集合 set 自動去重。統計票數用 votes[name] = votes.get(name, 0) + 1。
- 字典以鍵值對儲存:用鍵查找值,不用記位置。
- 新增與更新同一寫法:d[key] = value;鍵新則新增、鍵舊則更新。
- get() 安全讀值:鍵不存在時返回預設值,不會 KeyError。
文體小知識:編程教學課每個概念都配一段可以親手試的代碼例子,照住輸入、改一改,最快學會。
§課文原文 Passage
1字典(Dictionary)是 Python 用來把資料一對一對儲存的結構:每一對有一個鍵(Key)和一個值(Value),就像真正的字典用字查解釋、通訊錄用姓名查電話。寫法:phonebook = {"小明": "9123 4567", "Mary": "6234 7789"}。要查小明的電話,寫 phonebook["小明"] 就得 "9123 4567" — 完全不用記住他在清單的第幾個位置。
2字典的常用操作很直觀:phonebook["阿強"] = "9876 1234" 新增一位聯絡人;對同一個鍵再指派一次就會更新。用 in 可以檢查鍵是否存在:"小明" in phonebook 得 True。想安全讀值就用 phonebook.get("阿明", "沒有紀錄") — 鍵不存在時返回預設文字,程式不會因此出錯。
3走訪字典用 for name, phone in phonebook.items(): 可以一次過取出所有鍵值對。另一個好用結構是集合(Set):set(["小明", "阿強", "小明"]) 得 {"小明", "阿強"} — 自動去掉重複元素,而且沒有次序。要數班中有多少個不同姓名,交給 set 一步就知。
4實際應用:班長選舉點票,用字典做計數器 — votes[name] = votes.get(name, 0) + 1,每唱一票加一,最後哪個鍵的值最大就當選。通訊錄、存貨數量、文章字詞統計都是同一套路:鍵做名字,值做數量。學懂字典與集合,處理成批資料快要人一步。
1重點摘要 Summary
字典用鍵查值(phonebook["小明"]),get() 安全讀值,in 檢查鍵是否存在;集合 set 自動去重。統計票數用 votes[name] = votes.get(name, 0) + 1。
2生字卡 Vocabulary
以鍵值對儲存資料的結構,用鍵直接查找值,例如通訊錄。
字典中用來查找的名稱,例如 {"小明": "9123 4567"} 裡的「小明」。
鍵所對應的資料,例如 {"小明": "9123 4567"} 裡的電話號碼。
字典中一個鍵配一個值的基本單位,用冒號連接。
按鍵取值,鍵不存在時返回預設值而不報錯,例如 d.get("x", 0)。
傳回所有鍵值對,配合 for 一次過取出鍵和值。
檢查某鍵是否存在於字典或某元素是否存在於集合,結果為 True 或 False。
無次序、不重複的元素組合,常用來去重,例如 set([1, 1, 2]) 得 {1, 2}。
把重複的元素只保留一份的處理,是集合的典型用途。
3逐步講解 Steps
- 建立字典與讀值字典(Dictionary)以「鍵—值」成對儲存資料:student = {"name": "小明", "class": "3A"}。讀值時方括號內寫鍵:student["name"] 得 "小明",student["class"] 得 "3A"。與清單不同,字典用鍵而非編號存取,因此不必記住資料排第幾位,如同通訊錄用姓名查電話,而非用「第幾個聯絡人」查電話。鍵通常是字串且不可重複,值則可以是任何類型,這種彈性令字典成為最常用的資料結構之一。
- 新增與更新同一句寫法,鍵新就新增、鍵舊就更新:student["age"] = 14 新增一對鍵值;student["class"] = "3B" 把原本的 "3A" 更新為 "3B"。這種一致性令字典操作極為簡單:不必區分「加入」與「修改」兩種語法。留意更新是直接覆蓋舊值,舊值不會保留;若想保留歷史紀錄,應把值設為清單再用 append 加入。字典會記住新增的次序,列印時按此顯示,方便閱讀。
- 用 get() 安全讀值直接以 student["phone"] 讀取不存在的鍵,程式會報 KeyError 而中斷;get() 則安全:student.get("phone", "沒有填寫") 在鍵不存在時傳回預設文字「沒有填寫」,程式繼續運行。第二個參數可以省略,此時傳回 None。處理用戶輸入與外部資料時,鍵未必齊備,get() 是防錯必備工具;例如統計計數常用 votes.get(name, 0),首次遇見某名字時當作 0 看待,然後再加一。
- 走訪字典與 in 檢查走訪整個字典用 items():for name, phone in phonebook.items(): print(name, phone) 逐行印出「小明 9123 4567」等配對,items() 同時交出鍵與值。檢查鍵是否存在用 in:"小明" in phonebook 傳回 True,"阿明" in phonebook 傳回 False;配合 if 使用:if "阿明" in phonebook: print("找到了")。兩者組合可以寫出穩健的查詢程式:先用 in 檢查,存在才讀值,KeyError 永遠不會發生。
- 集合自動去重集合(Set)自動剔除重複元素:set(["小明", "阿強", "小明", "小美"]) 得 {"小明", "阿強", "小美"},只餘三個不同姓名。配合 len() 即得人數:len(set(names)) 就是不重複姓名的數目。集合沒有次序,不能像清單那樣用 scores[0] 讀取;它是「只要唯一、不要次序」場合的工具,例如統計班中有多少個不同國籍、問卷出現過哪些不同答案,一步便能完成。
- 字典做計數器字典最經典的應用是計數器。票據清單 votes = ["小明", "小美", "小明"],反覆執行 votes[name] = votes.get(name, 0) + 1:首次遇見「小明」時 get 傳回 0,加 1 後變成 1;第二次遇見時由 1 加至 2。全部處理之後 votes = {"小明": 2, "小美": 1}。這個「查舊值、加一、存回」的句式是編程通用套路,文章字詞統計、存貨點算、網站流量統計,靠的都是同一招。
- 綜合應用:唱票程式把上述技巧組合成選班長唱票程式:先建空計數器 count = {};for name in votes: 逐票處理,每票執行 count[name] = count.get(name, 0) + 1;完成後用 max(count, key=count.get) 找出值最大的鍵,即當選人。整個程式五六行,卻完成真實選舉的點票工作。同一套路更換資料即可用於:最受歡迎圖書借閱統計、食堂最受歡迎菜式調查。字典計數器是資料處理的第一把萬用鑰匙。
4圖解 Diagrams
5例題示範 Example
例題:班長選舉唱票結果為 ["小明", "小美", "小明", "阿強", "小明"],用字典統計票數並找出當選人。
- 建立空計數器:count = {}。
- 逐票走訪:for name in votes:,每輪取出一個名字。
- 每票加一:count[name] = count.get(name, 0) + 1,首次遇見的名字由 0 起算。
- 唱票完成後 count = {"小明": 3, "小美": 1, "阿強": 1};用 max(count, key=count.get) 取值最大的鍵。
- 結果:小明得 3 票當選;可用 sum(count.values()) = 5 核對總票數無誤。
- 答案:票數統計為小明 3 票、小美 1 票、阿強 1 票,小明以 3 票當選。核心句式是 count[name] = count.get(name, 0) + 1,配合 max(count, key=count.get) 找出最高票者。
6常見錯誤 Mistakes
75 題快測 Quick check
Q1phonebook = {"小明": "9123 4567", "Mary": "6234 7789"},phonebook["Mary"] 的結果是什麼?
Q2set([3, 1, 3, 2, 1]) 的結果是什麼?
Q3想讀一個可能不存在的鍵,最穩妥的寫法是?A. d["key"] B. d.get("key", 0) C. d.append("key")
Q4"小明" in phonebook 這句用來做什麼?
Q5votes = [];逐個執行 votes[name] = votes.get(name, 0) + 1 三次,name 依次為 "小明"、"小美"、"小明"。最後 votes 是什麼?
8重點回顧 Recap
- 字典以鍵值對儲存:用鍵查找值,不用記位置。
- 新增與更新同一寫法:d[key] = value;鍵新則新增、鍵舊則更新。
- get() 安全讀值:鍵不存在時返回預設值,不會 KeyError。
- in 檢查鍵是否存在;items() 讓 for 同時取出鍵和值。
- 集合 set 無次序而且自動去重;統計票數、字詞就用字典計數器套路。