Python 字典(Dictionary)詳解:新手指南
更新日期: 2024 年 10 月 3 日
在 Python 編程中,字典(Dictionary) 是一種非常重要且常用的數據結構。
它允許我們以 鍵-值對(key-value pair) 的形式存儲和操作數據。
對於剛開始學習 Python 的新手來說,理解並掌握字典的用法,將大大提升你在數據處理和程式開發中的效率。
本文將詳細介紹 Python 中的字典,包括其基本概念、操作方法、實際應用和注意事項,並提供豐富的示例,幫助你在實際開發中靈活運用。
什麼是字典?
定義
字典(Dictionary) 是 Python 中的一種內建數據類型,用於存儲 鍵-值對(key-value pair)。
每個鍵(Key)必須是唯一且不可變的,值(Value)可以是任意類型。
特點
- 無序性(Python 3.6+ 開始維護插入順序):在早期版本中,字典是無序的。在 Python 3.6 及以後的版本中,字典開始維護元素的插入順序。
- 鍵的唯一性:字典中的鍵必須是唯一的,如果出現重複的鍵,後面的值會覆蓋前面的值。
- 快速查找:基於哈希表(hash table)實現,具有快速的查找速度。
如何創建字典?
使用花括號 {}
示例:
# 創建一個空字典
my_dict = {}
# 創建一個包含元素的字典
student = {'name': 'Alice', 'age': 20, 'grade': 'A'}
使用 dict()
函數
示例:
# 使用關鍵字參數創建字典
student = dict(name='Alice', age=20, grade='A')
# 使用可迭代物件創建字典
pairs = [('name', 'Alice'), ('age', 20), ('grade', 'A')]
student = dict(pairs)
字典的基本操作
訪問字典元素
語法:
value = dictionary[key]
示例:
student = {'name': 'Alice', 'age': 20, 'grade': 'A'}
print(student['name'])
# 輸出:Alice
修改字典元素
示例:
student = {'name': 'Alice', 'age': 20, 'grade': 'A'}
student['age'] = 21
print(student)
# 輸出:{'name': 'Alice', 'age': 21, 'grade': 'A'}
添加新元素
示例:
student = {'name': 'Alice', 'age': 21, 'grade': 'A'}
student['major'] = 'Computer Science'
print(student)
# 輸出:{'name': 'Alice', 'age': 21, 'grade': 'A', 'major': 'Computer Science'}
刪除字典元素
- 使用
del
關鍵字
del student['grade']
print(student)
# 輸出:{'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
- 使用
pop()
方法
age = student.pop('age')
print(age)
# 輸出:21
print(student)
# 輸出:{'name': 'Alice', 'major': 'Computer Science'}
清空字典
student.clear()
print(student) # 輸出:{}
字典的常用方法
keys()
方法
返回字典中所有的鍵。
示例:
student = {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
keys = student.keys()
print(keys)
# 輸出:dict_keys(['name', 'age', 'major'])
values()
方法
返回字典中所有的值。
示例:
student = {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
values = student.values()
print(values)
# 輸出:dict_values(['Alice', 21, 'Computer Science'])
items()
方法
返回字典中所有的鍵值對,作為元組的列表。
示例:
student = {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
items = student.items()
print(items)
# 輸出:dict_items([('name', 'Alice'), ('age', 21), ('major', 'Computer Science')])
get()
方法
根據鍵獲取值,如果鍵不存在,返回默認值。
示例:
student = {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
grade = student.get('grade', 'N/A')
print(grade)
# 輸出:N/A
update()
方法
更新字典,將另一個字典的鍵值對添加到當前字典中。
示例:
student = {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}
new_info = {'grade': 'A', 'age': 22}
student.update(new_info)
print(student)
# 輸出:{'name': 'Alice', 'age': 22, 'major': 'Computer Science', 'grade': 'A'}
遍歷字典
遍歷鍵
示例:
student = {'name': 'Alice', 'age': 22, 'major': 'Computer Science', 'grade': 'A'}
for key in student.keys():
print(key)
輸出:
name
age
major
grade
遍歷值
示例:
student = {'name': 'Alice', 'age': 22, 'major': 'Computer Science', 'grade': 'A'}
for value in student.values():
print(value)
輸出:
Alice
22
Computer Science
A
遍歷鍵和值
示例:
student = {'name': 'Alice', 'age': 22, 'major': 'Computer Science', 'grade': 'A'}
for key, value in student.items():
print(f"{key}: {value}")
輸出:
name: Alice
age: 22
major: Computer Science
grade: A
字典的應用示例
計算單詞出現次數
示例:
text = "apple banana apple strawberry banana apple"
words = text.split()
# 將字串按照空格進行分割,返回一個包含單詞的列表。
# 分割結果 words = ['apple', 'banana', 'apple', 'strawberry', 'banana', 'apple']
word_count = {}
# 準備一個容器,用於記錄每個單詞的計數。
for word in words:
if word in word_count:
# 檢查當前單詞 word 是否已經在字典 word_count 中作為一個鍵存在。
word_count[word] += 1
# 如果存在(單詞已經被記錄過)將該單詞對應的計數加 1
else:
word_count[word] = 1
# 如果不存在(單詞尚未被記錄)在字典中添加該單詞作為鍵,計數初始值設為 1
print(word_count)
# 輸出:{'apple': 3, 'banana': 2, 'strawberry': 1}
使用字典存儲學生信息
示例:
students = [
{'name': 'Alice', 'age': 22, 'major': 'Computer Science'},
{'name': 'Bob', 'age': 21, 'major': 'Mathematics'},
{'name': 'Charlie', 'age': 23, 'major': 'Physics'}
]
for student in students:
print(f"{student['name']} 的專業是 {student['major']}")
輸出:
Alice 的專業是 Computer Science
Bob 的專業是 Mathematics
Charlie 的專業是 Physics
使用字典實現簡單的電話簿
示例:
phone_book = {}
# 添加聯繫人
phone_book['Alice'] = '123-456-7890'
phone_book['Bob'] = '987-654-3210'
# 查詢聯繫人
name = input("請輸入要查詢的姓名:")
phone = phone_book.get(name, '未找到該聯繫人')
print(f"{name} 的電話是:{phone}")
字典的注意事項
鍵必須是不可變的
- 字典的鍵必須是不可變物件,如 字串、數字、元組。
- 列表、字典 不能作為鍵,因為它們是可變的,無法計算哈希值。
錯誤示例:
my_dict = {['key1']: 'value1'}
# TypeError: unhashable type: 'list'
鍵的唯一性
- 如果在創建或更新字典時,出現重複的鍵,後面的值會覆蓋前面的值。
示例:
my_dict = {'key1': 'value1', 'key1': 'value2'}
print(my_dict) # 輸出:{'key1': 'value2'}
避免鍵不存在的錯誤
- 在訪問字典元素時,若鍵不存在,會引發 KeyError。
解決方案:
- 使用
get()
方法,提供默認值。 - 在訪問前使用
in
檢查鍵是否存在。
示例:
if 'grade' in student:
print(student['grade'])
else:
print('未找到成績信息')
字典的高級用法
字典推導式
與列表推導式類似,可以使用字典推導式快速創建字典。
示例:
squares = {x: x**2 for x in range(1, 6)}
print(squares)
# 輸出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
使用 defaultdict
來自 collections
模組的 defaultdict
,可以為不存在的鍵提供默認值,避免 KeyError
。
示例:
from collections import defaultdict
word_count = defaultdict(int)
words = ['apple', 'banana', 'apple']
for word in words:
word_count[word] += 1
print(word_count)
# 輸出:defaultdict(<class 'int'>, {'apple': 2, 'banana': 1})
有序字典 OrderedDict
在 Python 3.6 之前,字典是無序的,可以使用 collections
模組的 OrderedDict
來維護插入順序。
示例:
from collections import OrderedDict
ordered_dict = OrderedDict()
ordered_dict['a'] = 1
ordered_dict['b'] = 2
ordered_dict['c'] = 3
print(ordered_dict)
# 輸出:OrderedDict([('a', 1), ('b', 2), ('c', 3)])
結論
- 字典 是 Python 中強大的數據結構,適用於存儲和快速查找鍵值對。
- 主要功能:
- 存儲鍵值對,方便快速查找。
- 動態添加、修改、刪除元素。
- 適用於各種場景,如計數、配置、數據存儲等。
- 使用注意事項:
- 鍵必須是不可變的且唯一的。
- 小心處理不存在的鍵,避免
KeyError
。