什么是字典
字典(Dictionary)是Python中的一種內置數據結構,用于存儲鍵值對(key-value pair)。字典的特點是通過鍵來快速查找值,鍵必須是唯一的,而值可以是任何數據類型。字典在其他編程語言中通常被稱為哈希表或關聯數組。
字典使用花括號 {}
括起來,鍵值對之間用逗號 ,
分隔,每個鍵和值之間用冒號 :
分隔。例如:
my_dict = {'name': 'John','age': 25,'city': 'New York'
}
創建字典
創建字典的方法有多種,可以使用花括號 {}
或 dict()
函數。
使用花括號創建字典
# 創建一個空字典
empty_dict = {}# 創建一個帶有初始鍵值對的字典
person = {'name': 'Alice','age': 30,'city': 'Seattle'
}
使用 dict()
函數創建字典
# 創建一個空字典
empty_dict = dict()# 使用關鍵字參數創建字典
person = dict(name='Bob', age=25, city='San Francisco')# 從鍵值對的列表創建字典
person = dict([('name', 'Carol'), ('age', 22), ('city', 'Chicago')])
訪問字典元素
可以通過鍵來訪問字典中的值。如果鍵不存在,會引發 KeyError
。
person = {'name': 'David','age': 28,'city': 'Los Angeles'
}# 通過鍵訪問值
print(person['name']) # 輸出 'David'# 使用 get() 方法訪問值,若鍵不存在則返回 None 或指定的默認值
print(person.get('age')) # 輸出 28
print(person.get('gender')) # 輸出 None
print(person.get('gender', 'Unknown')) # 輸出 'Unknown'
修改字典元素
可以通過鍵修改字典中的值,如果鍵不存在,則會添加新的鍵值對。
person = {'name': 'Eve','age': 35,'city': 'Boston'
}# 修改已有鍵的值
person['age'] = 36
print(person) # 輸出 {'name': 'Eve', 'age': 36, 'city': 'Boston'}# 添加新的鍵值對
person['gender'] = 'Female'
print(person) # 輸出 {'name': 'Eve', 'age': 36, 'city': 'Boston', 'gender': 'Female'}
刪除字典元素
可以使用 del
語句或 pop()
方法刪除字典中的鍵值對。
person = {'name': 'Frank','age': 40,'city': 'Denver'
}# 使用 del 刪除鍵值對
del person['city']
print(person) # 輸出 {'name': 'Frank', 'age': 40}# 使用 pop() 方法刪除鍵值對并返回被刪除的值
age = person.pop('age')
print(age) # 輸出 40
print(person) # 輸出 {'name': 'Frank'}
字典的常用操作
獲取字典的鍵、值和鍵值對
可以使用 keys()
、values()
和 items()
方法分別獲取字典的鍵、值和鍵值對。
person = {'name': 'Grace','age': 29,'city': 'Houston'
}# 獲取所有鍵
keys = person.keys()
print(keys) # 輸出 dict_keys(['name', 'age', 'city'])# 獲取所有值
values = person.values()
print(values) # 輸出 dict_values(['Grace', 29, 'Houston'])# 獲取所有鍵值對
items = person.items()
print(items) # 輸出 dict_items([('name', 'Grace'), ('age', 29), ('city', 'Houston')])
遍歷字典
可以使用 for
循環遍歷字典的鍵、值或鍵值對。
person = {'name': 'Hank','age': 45,'city': 'Miami'
}# 遍歷字典的鍵
for key in person:print(key, person[key])# 遍歷字典的鍵和值
for key, value in person.items():print(key, value)
合并字典
可以使用 update()
方法將一個字典的鍵值對更新到另一個字典中。如果鍵已存在,則更新其值;如果鍵不存在,則添加新的鍵值對。
dict1 = {'name': 'Ivy', 'age': 32}
dict2 = {'city': 'Atlanta', 'age': 33}# 使用 update() 方法合并字典
dict1.update(dict2)
print(dict1) # 輸出 {'name': 'Ivy', 'age': 33, 'city': 'Atlanta'}
字典的高級操作
字典推導式
字典推導式是一種簡潔的創建字典的方法,類似于列表推導式。語法為 {key: value for item in iterable}
。
# 創建一個平方字典
squares = {x: x**2 for x in range(6)}
print(squares) # 輸出 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}# 過濾字典中的元素
person = {'name': 'Jack', 'age': 50, 'city': 'Seattle', 'country': 'USA'}
filtered_dict = {k: v for k, v in person.items() if k != 'age'}
print(filtered_dict) # 輸出 {'name': 'Jack', 'city': 'Seattle', 'country': 'USA'}
嵌套字典
字典可以包含其他字典作為其值,這使得字典可以用于表示更復雜的數據結構。
# 嵌套字典示例
students = {'John': {'age': 20, 'major': 'Computer Science'},'Alice': {'age': 22, 'major': 'Mathematics'},'Bob': {'age': 21, 'major': 'Physics'}
}# 訪問嵌套字典中的元素
print(students['Alice']['major']) # 輸出 'Mathematics'# 添加新的嵌套字典
students['Eve'] = {'age': 23, 'major': 'Biology'}
print(students)
字典的實際應用
統計字符出現次數
字典可以用于統計字符串中每個字符出現的次數。
text = "hello world"# 統計字符出現次數
char_count = {}
for char in text:if char in char_count:char_count[char] += 1else:char_count[char] = 1print(char_count) # 輸出 {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
存儲和查詢配置參數
字典可以用于存儲和查詢應用程序的配置參數。
# 配置參數字典
config = {'host': 'localhost','port': 8080,'debug': True
}# 訪問配置參數
print(config['host']) # 輸出 'localhost'
print(config['port']) # 輸出 8080# 修改配置參數
config['debug'] = False
print(config) # 輸出 {'host': 'localhost', 'port': 8080, 'debug': False}
將字典轉換為JSON
在處理API請求或響應時,通常需要將字典轉換為JSON格式,可以使用 json
模塊實現。
import json# 字典
person = {'name': 'Kate','age': 27,'city': 'San Diego'
}# 將字典轉換為JSON字符串
person_json = json.dumps(person)
print(person_json) # 輸出 '{"name": "Kate", "age": 27, "city": "San Diego"}'# 將JSON字符串轉換為字典
person_dict = json.loads(person_json)
print(person_dict) # 輸出 {'name': 'Kate', 'age': 27, 'city': 'San Diego'}
字典的注意事項
- 鍵必須是可哈希的:字典的鍵必須是不可變類型,如字符串、數字、元組等。列表、字典等可變類型不能作為字典的鍵。
- 字典是無序的:在Python 3.7之前,字典是無序的。從Python 3.7開始,字典的插入順序被保留,但不應依賴于此特性。
- 字典的性能:字典的查找、插入和刪除操作在平均情況下都是O(1)時間復雜度,但最壞情況下可能會退化為O(n)。
字典是Python中強大且靈活的數據結構,適用于需要快速查找、插入和刪除操作的場景。通過對字典的創建、訪問、修改、刪除等基本操作的理解,以及高級操作如字典推導式和嵌套字典的應用,可以更好地利用字典處理復雜的數據結構和實現高效的算法。