在 Python 中,字典(dict
)是非常常用的資料結構,用來儲存 key-value 配對。而在操作字典時,.setdefault()
是一個常被忽略但非常實用的方法。
這篇文章會完整介紹 .setdefault()
的語法、用途、與實務範例,幫助你更有效率地處理字典資料。
什麼是 .setdefault()
?
.setdefault()
是字典物件的方法,用來取得某個鍵的值,如果這個鍵不存在,則會自動新增這個鍵並指定一個預設值。語法:
dict.setdefault(key, default=None)
key
:你想要查找的鍵。default
:如果鍵不存在時,要設定的預設值(可省略,預設是None
)。- 回傳值:該鍵對應的值(無論是原本就有,或是剛被設置的 default 值)。
為什麼要用 .setdefault()
?
如果你要在操作字典時同時判斷鍵是否存在、並在不存在時新增預設值,setdefault()
可以讓程式碼更簡潔。
範例一:基本用法
data = {'apple': 3, 'banana': 5}
# 取得已存在的 key
print(data.setdefault('apple', 0)) # 輸出: 3
# 新增不存在的 key,並給予預設值
print(data.setdefault('orange', 2)) # 輸出: 2
print(data) # {'apple': 3, 'banana': 5, 'orange': 2}
範例二:避免重複判斷 key 是否存在
傳統寫法:
if 'cat' not in animal_count:
animal_count['cat'] = 0
animal_count['cat'] += 1
使用 .setdefault()
:
animal_count.setdefault('cat', 0)
animal_count['cat'] += 1
這樣可以少寫一個 if
判斷,程式更簡潔。
範例三:用於字典中嵌套字典(或列表)
當你在處理像是分類、群組的資料結構時,setdefault()
很有幫助:
data = {}
items = [
('fruit', 'apple'),
('fruit', 'banana'),
('vegetable', 'carrot')
]
for category, item in items:
data.setdefault(category, []).append(item)
print(data)
# 輸出: {'fruit': ['apple', 'banana'], 'vegetable': ['carrot']}
.setdefault()
vs defaultdict
雖然 setdefault()
很方便,但在某些情境下使用 collections.defaultdict
更簡潔,尤其當你常常需要初始化預設值:
from collections import defaultdict
data = defaultdict(list)
for category, item in items:
data[category].append(item)
如果你不想額外引入模組,可以用 .setdefault()
達到相同效果。
小結

範例程式
下面是一個使用 .setdefault()
方法實作的中文字數統計程式,可以讓你練習如何統計每個「字元」出現的次數:
🧪 範例程式:使用 .setdefault()
統計每個字出現的次數
def count_characters(text):
count_dict = {}
for char in text:
# 忽略空白字元,可依需要移除這行
if char.isspace():
continue
count_dict.setdefault(char, 0)
count_dict[char] += 1
return count_dict
# 📥 測試資料(你也可以輸入自己的文字)
input_text = "今天天氣真好,今天天氣很好。"
# 📊 執行統計
result = count_characters(input_text)
# 📤 輸出結果
for char, count in result.items():
print(f"字「{char}」出現了 {count} 次")
📝 範例輸出:
字「今」出現了 2 次
字「天」出現了 4 次
字「氣」出現了 2 次
字「真」出現了 1 次
字「好」出現了 2 次
字「,」出現了 1 次
字「很」出現了 1 次
字「。」 出現了 1 次
✅ 練習建議
你可以試著修改這個程式:
- 改成統計「詞」(例如用
text.split()
分詞後統計) - 改成忽略標點符號
- 改成讀取檔案來統計整個檔案內容