1.1 字典及其屬性
字典 (dictionary) 在 Python 中是一種 有序的鍵值對集合,每個鍵都必須是唯一的。字典是 Python 中最靈活且強大的數據類型之一,用於儲存和管理數據。我們會非常頻繁地使用它們,幾乎就像列表一樣頻繁。很快你就會相信這一點 :)
字典的主要屬性:
1. 唯一鍵
字典中的每個鍵必須是唯一的。如果字典中添加了一個已存在鍵的鍵值對,那麼舊的值將被新的值替換。例如,如果你想儲存學生資料並使用他們的ID作為鍵:
students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students) # 輸出: {'123': 'Mike', '124': 'Alice'}
2. 有序性
重要!
在 Python 3.7 之前,字典是無序的集合,元素的順序不保證。從 Python 3.7 開始,字典保留了元素添加的順序,但這點直到 Python 3.8 才成為語言規範的標準。
那是5年前的事了。我們學習的是 Python 3.12 的版本,所以你可以放心地將字典視為一個
有序的元素集合
。
3. 可變性
字典是可變的,這意味著在創建字典後,你可以添加、修改或刪除元素。例如,添加一個學生的地址:
student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student) # 輸出: {'name': 'John', 'age': 20, 'address': '123 Main St'}
4. 效率
字典經過優化,能快速查找、添加和刪除鍵值對。平均來說,查找、添加和刪除操作的時間複雜度為 O(1)。至於什麼是算法的時間複雜度,我們稍後將在「算法和數據結構」主題中學習。
5. 鍵和值
字典中的鍵可以是任何不可變的數據類型,如字符串、數字或元組。值可以是任何數據類型,包括其他字典。
6. 訪問和修改方法
字典支持各種方法來訪問元素,添加、修改和刪除鍵值對。其中包括
get()
, keys()
, values()
,
items()
, update()
, pop()
等方法。詳細的我們會在以後的講座中討論。
7. 遍歷元素
你可以通過循環遍歷字典中的鍵、值或鍵值對。這使得對字典元素進行操作變得非常簡單。例如:
student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
print(f"{key}: {value}")
輸出將是:
name: John
age: 20
address: 123 Main St
8. 鍵的可哈希性
字典中的鍵必須是可哈希的。 這意味著鍵必須有一個在其生命週期中不變的哈希值。哈希值由一個哈希函數獲得,這是一種將任意長度的輸入轉換為固定長度輸出的算法。這就是哈希值或哈希碼的由來。不可變的數據類型,如字符串、數字和元組,是可哈希的,並且可以用作鍵。
我們將在「算法和數據結構」主題中深入研究哈希函數和哈希性。
1.2 使用 {}
創建字典
在 Python 中可以通過多種方式創建字典。以下是一些創建字典對象的方法和示例:
使用大括號 {}
創建字典最常見的方法是使用包含鍵值對並用逗號分隔的大括號。鍵值對本身由冒號分隔。
# 創建空字典
empty_dict = {}
# 創建字典並添加元素
person = {
"name": "John",
"age": 30,
"city": "New York"
}
print(type(person))
print(person)
重要!
創建字典類似於創建集合。從某種意義上看,可以將字典視為由鍵組成的集合,這些鍵連接著值。
如果大括號中只列出了「鍵」,則創建的是集合;如果鍵後面有冒號並指定了值,則創建的是字典。空的大括號始終是字典。
# 創建空字典
empty_dict = {}
# 創建包含元素的集合
unique_items = {
"name",
"age",
"city"
}
print(type(unique_items))
print(unique_items)
1.3 使用 dict()
函數創建字典
dict()
函數可以從鍵值對序列或命名參數創建字典。
鍵值對序列示例:
# 從元組列表創建字典
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)
命名參數示例。不需要額外的括號:
# 使用命名參數創建字典
person = dict(name="John", age=30, city="New York")
print(person)
使用 dict.fromkeys()
方法
fromkeys()
方法使用給定的鍵和默認值創建字典。
# 用鍵和默認值創建字典
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value)
print(person)
字典會有三個鍵,但它們都有相同的值。
1.4 從現有變數創建字典
可以使用變數作為鍵和值創建字典。
# 從變數創建字典
name = "John"
age = 30
city = "New York"
person = {"name": name, "age": age, "city": city}
print(person)
1.5 使用字典生成器
字典生成器允許使用類似列表生成器的簡潔語法創建字典。
# 使用字典生成器創建字典
squares = {x: x**2 for x in range(1, 6)}
print(squares)
1.6 訪問字典中的值
使用 []
語法獲取鍵對應的值:
# 訪問字典中的值
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"]) # 輸出: John
重要!
如果找不到鍵,會拋出KeyError
錯誤。為了避免這種情況,可以使用get()
方法,該方法會返回鍵對應的值,如果不存在該鍵,則返回None
(或其他默認值)。
# 使用 get() 方法訪問字典中的值
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name")) # 輸出: John
print(person.get("address", "找不到地址")) # 輸出: 找不到地址
1.7 更改字典中的值
可以通過鍵訪問字典中的值並賦予它們新的值來進行更改。
# 更改字典中的值
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person) # 輸出: {'name': 'John', 'age': 31, 'city': 'New York'}
1.8 刪除字典中的元素
可以使用 del
操作符或pop()
方法刪除元素。
# 使用 del 刪除元素
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person) # 輸出: {'name': 'John', 'city': 'New York'}
# 使用 pop() 刪除元素
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person) # 輸出: {'name': 'John', 'city': 'New York'}
print(age) # 輸出: 30
1.9 檢查字典中是否存在鍵
可以使用 in
操作檢查字典中是否包含某個鍵。
# 檢查字典中是否存在鍵
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person) # 輸出: True
print("address" in person) # 輸出: False
1.10 遍歷字典中的元素
可以遍歷字典中的鍵、值或鍵值對:
# 遍歷字典中的鍵
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key)
# 遍歷字典中的值
for value in person.values():
print(value)
# 遍歷字典中的鍵值對
for key, value in person.items():
print(f"{key}: {value}")
1.11 字典在實際任務中的應用示例
讓我們看一些在實際生活中使用字典可能有幫助的例子:
例1:計算文本中單詞的頻率
假設我們有一段文本,我們想知道每個單詞在其中出現了多少次。
text = "hello world hello"
word_count = {}
for word in text.split():
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count) # 輸出: {'hello': 2, 'world': 1}
例2:學生資料儲存
我們可以使用字典來儲存學生資料,其中鍵是他們的學號,值是他們的詳細資料。
students = {
"123": {"name": "John", "age": 20, "major": "Computer Science"},
"124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"]) # 輸出: John
例3:電話簿
可以使用字典創建一個簡單的電話簿,其中鍵是名字,值是電話號碼。
phone_book = {
"John": "123-456-7890",
"Alice": "987-654-3210"
}
print(phone_book["Alice"]) # 輸出: 987-654-3210
GO TO FULL VERSION