資料結構 · 10 道範例題

Python 字典練習題與答案

字典用來儲存帶標籤的資料:一個鍵對應一個值,尋找應該很快。真正有用的技能不是背下所有方法,而是知道鍵不存在時會發生什麼。

50 道題在完整題庫中 · 19 道選擇 · 10 道填空 · 21 道輸出

這個主題考什麼

  • 用 get 安全讀取可能不存在的鍵,而不是讓程式崩潰。
  • 更新、合併並走訪鍵、值或鍵值對。
  • 識別哪些物件可以作為字典鍵。

常見錯誤

  • 鍵可能不存在時仍使用 d[key]。先判斷應該用 get 還是預設值。
  • 在走訪字典時改變它的大小。應走訪鍵或鍵值對的副本。
  • 用列表作為鍵。字典鍵必須可雜湊。
範例題

範例題

10

從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。

  1. 選擇題q0594

    1. 小明從奶茶選單查價格:menu.get("果茶", "暫無")。如果「果茶」不在選單裡,回傳?

    1. 總是回傳"暫無"
    2. "暫無"(鍵不存在時)
    3. 刪除果茶鍵
    4. 添加果茶鍵
    顯示答案

    答案

    B. "暫無"(鍵不存在時)

    解析: get(key, default) 在鍵存在時回傳對應的值,不存在時回傳預設值,且不會插入新鍵。所以選單裡沒有水果茶就回傳 'not available'。

  2. 選擇題q0604

    2. 鍵缺失且沒給預設值時,d.pop('a') 會怎樣?

    1. KeyError
    2. None
    3. IndexError
    4. TypeError
    顯示答案

    答案

    A. KeyError

    解析: pop 刪除鍵並回傳對應的值,但鍵缺失且沒給預設值時會拋 KeyError;傳第二個參數則改為回傳它,兩者差別很大。

  3. 選擇題q0611

    3. 🧋 小明判斷「珍珠奶茶」是否在選單字典裡,'key' in {'key':1} 的結果?

    1. True
    2. False
    3. 1
    4. 'key'
    顯示答案

    答案

    A. True

    解析: in 檢查的是鍵,'key' 正是這個字典的鍵,表達式為 True;值 1 在這裡不起作用,別用值來判斷成員關係。

  4. 選擇題q0625

    4. Python 3.7+ 的普通字典按什麼順序儲存鍵?

    1. 插入順序
    2. 字母順序
    3. 隨機
    4. 按值排序
    顯示答案

    答案

    A. 插入順序

    解析: 從 Python 3.7 起,語言保證字典保持插入順序,走訪就按加鍵的先後進行。要字母序得另外用 sorted()。

  5. 填空題q0596

    5. 小明判斷「珍珠奶茶」是否在選單字典 d 中:"珍珠奶茶" ___ d

    顯示答案

    答案

    in

    解析: in 運算子檢查的是鍵,只有 'bubble tea' 作為鍵存在時才為 True;它不看值,也不做任何型別轉換。

  6. 填空題q0607

    6. 🧋 小明從奶茶字典查價格,查不到回傳預設值,安全獲取字典值:d.___('key', '預設值')

    顯示答案

    答案

    get

    解析: get 先接鍵、再接兜底值,d.get('key', 'default') 不會拋例外。不傳兜底值時回傳 None。

  7. 填空題q0626

    7. 給選單做一份獨立副本。空裡填哪個方法?

    backup = menu.____()
    顯示答案

    答案

    copy

    解析: copy() 回傳淺拷貝,給 backup 加鍵不會影響 menu;但巢狀的值仍然共用,深結構要用 deepcopy。

  8. 輸出預測q0595

    8. get 和 setdefault 的區別在哪?輸出什麼?

    d = {"a": 1}
    print(d.get("b", 0), d.setdefault("c", 2), d)
    顯示答案

    答案

    0 2 {'a': 1, 'c': 2}

    解析: get('b', 0) 回傳 0 但不添加 b;setdefault('c', 2) 回傳 2 並把 c 插進去。於是依次列印 0、2 和 {'a': 1, 'c': 2}。

  9. 輸出預測q0618

    9. setdefault 設定不存在的 b 鍵,回傳值是什麼?

    d = {"a": 1}
    print(d.setdefault("b", 2), d)
    顯示答案

    答案

    2 {'a': 1, 'b': 2}

    解析: setdefault 在鍵存在時回傳原值,不存在時插入預設值並回傳它。這裡 b 缺失,於是回傳 2,d 裡也多出 b。

  10. 輸出預測q0630

    10. `score('quirky')` 回傳什麼?

    POINTS = {
        'a': 1, 'b': 3, 'c': 3, 'd': 2, 'e': 1,
        'f': 4, 'g': 2, 'h': 4, 'i': 1, 'j': 8,
        'k': 5, 'l': 1, 'm': 3, 'n': 1, 'o': 1,
        'p': 3, 'q': 10, 'r': 1, 's': 1, 't': 1,
        'u': 1, 'v': 4, 'w': 4, 'x': 8, 'y': 4,
        'z': 10
    }
    
    
    def score(word):
        if not word.isalpha():
            return 0
        return sum(POINTS[letter] for letter in word.lower())
    
    print(score('quirky'))
    顯示答案

    答案

    22

    解析: q 10、u 1、i 1、r 1、k 5、y 4,相加得 22,所以 score('quirky') 回傳 22。沒有任何去重,重複字母會再算一次。

常見問題

get 和方括號讀取有什麼區別?

d[key] 在鍵不存在時拋出 KeyError;d.get(key) 回傳 None,d.get(key, default) 回傳你給的預設值。

字典會保留插入順序嗎?

目前 Python 版本把插入順序作為語言行為保留,但除非順序是需求的一部分,不要依賴它。

繼續保持練習節奏。

完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。

開啟完整練習