iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
自我挑戰組

順著感覺走!從零開始的 Python & Vibe Coding 遊戲創作系列 第 8

第八天: Dictionaries (字典):用鍵值對儲存系統化資訊

  • 分享至 

  • xImage
  •  

嗨,各位程式碼冒險家!前一天我們深入探討了 Function (函式),它幫助我們將程式碼模組化、提高可重用性,為複雜的遊戲邏輯打下了堅實的基礎。今天,我們要介紹一個同樣強大且用途廣泛的資料型態:Dictionary (字典)。想像一下我們在學生時期常用的國語字典,每個詞條都包含一個文字本身和其對應的字義。Python 的字典也類似,它能讓我們以一種系統化且易於查詢的方式儲存資訊,這對於我們的《奇幻卡牌競技場》這樣需要儲存大量角色、卡牌或物品屬性資料的遊戲專案來說,是不可或缺的工具。

Python 零基礎新手入門 #08 Dictionaries (字典):

https://www.youtube.com/watch?v=2uhs3TOmb64&list=TLGGIPyyn50l2DwxMTA5MjAyNQ

什麼是字典?核心概念:鍵與值

Python 字典的核心概念是**「鍵值對」(Key-Value Pair)**。字典中的每個元素都由一個獨特的 Key (鍵) 和其對應的 Value (值) 所組成,這兩者合稱為一個 Item (項目)。Key 必須是獨一無二的,就像傳統字典中不會有重複的詞條一樣。

# 範例:儲存手機規格的字典
手機規格 = {
    "廠牌": "蘋果",
    "型號": "iPhone 14 Pro",
    "容量": "128 GB",
    "價格": 32900,
    "全新": True
}

定義與查詢字典:取得你想要的資訊

建立字典非常簡單,我們使用大括號 {} 來包覆所有資料,鍵與值之間用冒號 : 隔開,不同的項目則用逗號 , 隔開。
要查詢字典內的資料,我們可以像操作清單一樣,直接使用 Key 的名稱來存取其對應的 Value:

print(手機規格["廠牌"]) # 輸出:蘋果 
print(手機規格["型號"]) # 輸出:iPhone 14 Pro 

然而,如果我們查詢的 Key 不存在於字典中,程式碼會中斷並顯示錯誤訊息。為了避免這種情況,我們可以改用 get() 語法。get() 不僅能用來查詢字典,還可以讓我們在找不到 Key 時,設定一個預設的回傳訊息,而不是讓程式當機。

print(手機規格.get("顏色", "查無此項")) # 輸出:查無此項 
此外,你也可以利用 If 條件判斷式 來檢查某個 Key 是否存在於字典中,再決定下一步的動作。

值的多樣性:不僅限於文字

字典中的 Value 不僅可以是字串,它還可以是任何資料型態,例如數字 (int, float)、布林值 (bool),甚至可以是清單 (List) 或其他字典。這使得字典在儲存複雜、多層次的資料時更加靈活。

手機規格_進階 = {
    "廠牌": "三星",
    "型號": "Galaxy S23",
    "容量": "256 GB",
    "顏色": ["黑色", "綠色", "白色"], # 值為清單 
    "有庫存": True
}

# 存取字典中清單的元素 
print(手機規格_進階["顏色"]) # 輸出:黑色

操作字典:新增、修改與刪除資料對字典的內容進行操作也非常直觀:

• 新增資料:如果字典中不存在指定的 Key,直接賦值即可新增一個新項目。
• 修改資料:如果指定的 Key 已經存在,賦值操作會直接覆寫其原有的 Value。
• 刪除資料:
◦ pop(key):根據指定的 Key 刪除單個項目。
◦ popitem():刪除字典中的最後一個項目,不需要指定 Key。
◦ clear():清除字典中的所有內容。

遍歷字典:搭配 For Loop 巡覽資訊

當我們想要一次性列出字典中的所有鍵、值或項目時,For Loop 迴圈 就派上用場了。
• 列出所有 Key:直接對字典進行 For Loop 迭代,會預設遍歷所有的 Key。
• 列出所有 Value:使用 字典名稱.values() 方法。
• 同時列出 Key 和 Value:使用 字典名稱.items() 方法,它會將每個鍵值對打包成一個元組 (tuple) 回傳。我們可以在 For Loop 中直接解包 (unpack) 這個元組,讓程式碼更清晰。

綜合應用:簡易手機庫存查詢系統

讓我們將今天所學的字典知識,應用到一個簡易的手機庫存查詢系統中。假設我們有多款手機的庫存資料,並儲存在一個清單中的字典裡。

手機庫存 = [
    {"廠牌": "蘋果", "型號": "iPhone 14 Pro", "顏色": "深紫色", "容量": "256GB"},
    {"廠牌": "小米", "型號": "Xiaomi 13 Ultra", "顏色": "黑色", "容量": "512GB"},
    {"廠牌": "三星", "型號": "Galaxy S23 Ultra", "顏色": "綠色", "容量": "256GB"}
]

# 讓使用者輸入想查詢的廠牌 
查詢廠牌 = input("請輸入您想查詢的手機廠牌:")
# 方法一:粗略判斷是否存在 (將所有字典轉為字串後判斷) 
# 注意:這種方法在實際應用中可能不夠精確,但為來源提供的方法 
if 查詢廠牌 in str(手機庫存):
    print(f"{查詢廠牌} 有庫存!")
else:
    print(f"{查詢廠牌} 無庫存。")
# 方法二:精確查詢並顯示詳細資訊 
找到手機 = False
for 手機 in 手機庫存: # 遍歷手機庫存清單中的每個手機字典 
    if 手機["廠牌"] == 查詢廠牌: # 檢查字典的 "廠牌" Key 是否與查詢廠牌相符 
        print(f"型號:{手機['型號']}")      # 注意:這裡使用單引號來存取字典的 Key 
        print(f"顏色:{手機['顏色']}")
        print(f"容量:{手機['容量']}")
        找到手機 = True
        break # 找到後即可跳出迴圈

if not 找到手機:
    print(f"抱歉,目前沒有 {查詢廠牌} 手機的庫存。")

這個範例展示了字典如何有效地組織結構化資料,讓資料的查詢和管理變得輕而易舉。透過將多個字典放入清單中,我們能夠建立一個小型資料庫,並透過迴圈和條件判斷來實現查詢功能。需要特別注意的是,在 print 語法中引用字典的 Key 時,如果外部字串已經使用雙引號,則內部引用字典 Key 的引號必須改用單引號,反之亦然,以避免語法錯誤。

恭喜您!今天我們學習了 Python 強大的 Dictionary (字典) 資料型態,掌握了其鍵值對的核心概念、如何定義、查詢,以及新增、修改和刪除資料的方法。我們也學會了如何搭配 For Loop 來高效地遍歷字典內容,並透過一個實用的手機庫存查詢系統,見證了字典在儲存和管理系統化資訊方面的強大應用。明天,我們將介紹如何將程式碼拆分成不同的檔案,以提高專案的可管理性:Module (模組),敬請期待!


上一篇
第七天: Function (函式):打造可重用的程式碼區塊
下一篇
第九天: Module (模組):高效管理與重用程式碼
系列文
順著感覺走!從零開始的 Python & Vibe Coding 遊戲創作12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言