Python 字典的 keys() 和 values() 方法詳解:新手指南
更新日期: 2024 年 10 月 3 日
在 Python 編程中,字典(Dictionary) 是一種非常重要的數據結構,用於存儲 鍵-值對(key-value pair)。
當處理字典時,了解如何獲取字典的所有鍵或所有值是至關重要的。
Python 提供了兩個內建方法:keys()
和 values()
,讓我們可以輕鬆地訪問字典的鍵和值。
本篇文章將詳細介紹這兩個方法的用法,包括它們的基本概念、使用方法、實際應用和注意事項,幫助新手更好地掌握字典操作。
什麼是字典的 keys()
和 values()
方法?
定義
keys()
方法:返回一個 字典檢視,包含字典中所有的鍵。values()
方法:返回一個 字典檢視,包含字典中所有的值。
特點
- 字典檢視(Dictionary View):提供對字典鍵或值的動態視圖,當字典改變時,檢視也會跟著改變。
- 可迭代(Iterable):可以使用
for
迴圈遍歷,也可以轉換為串列或集合。
keys()
方法的使用
語法
dictionary.keys()
- 返回值:一個包含字典所有鍵的 字典檢視。
2. 示例
student = {'name': 'Alice', 'age': 20, 'grade': 'A'}
keys = student.keys()
print(keys)
輸出:
dict_keys(['name', 'age', 'grade'])
解釋:
dict_keys
表示返回的是一個 字典檢視,內含字典的所有鍵。
遍歷鍵
for key in student.keys():
print(key)
輸出:
name
age
grade
簡化寫法:
- 因為默認情況下,遍歷字典時會遍歷鍵,所以可以省略
.keys()
:
for key in student:
print(key)
values()
方法的使用
語法
dictionary.values()
- 返回值:一個包含字典所有值的 字典檢視。
示例
student = {'name': 'Alice', 'age': 20, 'grade': 'A'}
values = student.values()
print(values)
輸出:
dict_values(['Alice', 20, 'A'])
解釋:
dict_values
表示返回的是一個 字典檢視,內含字典的所有值。
遍歷值
for value in student.values():
print(value)
輸出:
Alice
20
A
將字典檢視轉換為串列或集合
轉換為串列
示例:
keys_list = list(student.keys())
values_list = list(student.values())
print(keys_list) # 輸出:['name', 'age', 'grade']
print(values_list) # 輸出:['Alice', 20, 'A']
轉換為集合
示例:
keys_set = set(student.keys())
values_set = set(student.values())
print(keys_set) # 輸出:{'age', 'name', 'grade'}
print(values_set) # 輸出:{'Alice', 20, 'A'}
注意:
- 對於值的集合,如果值有重複,集合會自動去除重複項。
為何使用字典檢視而非串列或字典?
動態性
- 字典檢視是動態的:當字典內容發生變化時,通過
keys()
或values()
獲取的字典檢視會立即反映這些變化。 示例:
keys = student.keys()
print(keys) # 輸出:dict_keys(['name', 'age', 'grade'])
student['major'] = 'Computer Science'
print(keys) # 輸出:dict_keys(['name', 'age', 'grade', 'major'])
解釋:
- 新增了
'major'
鍵後,keys
檢視自動更新,反映了最新的字典內容。
高效性
- 節省內存:字典檢視不會創建原數據的副本,只是對原數據的引用,適用於大型字典的情況。
- 提高性能:避免了不必要的數據複製,尤其是在大型數據集或頻繁操作時,性能提升明顯。
一致性
- 保持數據一致性:使用字典檢視可以確保在不同地方訪問到的是字典的最新狀態,避免因為數據複製帶來的同步問題。
可迭代性和集合操作
- 支持集合操作:字典檢視可以進行集合運算,如交集、並集、差集等,這在需要比較兩個字典的鍵或值時非常方便。 示例:
dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 4, 'c': 5, 'd': 6}
common_keys = dict1.keys() & dict2.keys()
print(common_keys) # 輸出:{'b', 'c'}
解釋:
- 使用集合運算符
&
,找出了兩個字典的共同鍵。
items()
方法的補充
除了 keys()
和 values()
,還有一個常用的方法是 items()
,它返回字典的鍵值對。
語法
dictionary.items()
- 返回值:一個包含字典所有鍵值對的 字典檢視,每個元素是
(key, value)
的元組。
示例
items = student.items()
print(items)
輸出:
dict_items([('name', 'Alice'), ('age', 20), ('grade', 'A')])
遍歷鍵和值
for key, value in student.items():
print(f"{key}: {value}")
輸出:
name: Alice
age: 20
grade: A
實際應用示例
計算字典中值的總和
示例:
scores = {'Alice': 90, 'Bob': 85, 'Charlie': 92}
total_score = sum(scores.values())
print(f"總分:{total_score}")
輸出:
總分:267
查找最大值和最小值
示例:
scores = {'Alice': 90, 'Bob': 85, 'Charlie': 92}
max_score = max(scores.values())
min_score = min(scores.values())
print(f"最高分:{max_score}")
print(f"最低分:{min_score}")
輸出:
最高分:92
最低分:85
反轉字典的鍵和值
示例:
reversed_dict = {value: key for key, value in student.items()}
print(reversed_dict)
輸出:
{'Alice': 'name', 20: 'age', 'A': 'grade'}
注意:
- 如果值不唯一,可能會覆蓋鍵。
常見錯誤與調試
KeyError 異常
- 原因:在訪問不存在的鍵時,會引發
KeyError
。 示例:
if 'gender' in student.keys():
print(student['gender'])
else:
print('未找到性別信息')
值的重複性
- 注意:字典的值可以重複,使用
values()
獲取值時,需注意可能存在重複值。
字典檢視的只讀性
- 特性:字典檢視本身是不可修改的,但如果修改原字典,檢視會反映變化。 示例:
values = student.values()
# values[0] = 'Bob' # 會引發錯誤,字典檢視不支持索引賦值
總結
keys()
方法:獲取字典中所有的鍵,返回 字典檢視,可迭代。values()
方法:獲取字典中所有的值,返回 字典檢視,可迭代。- 字典檢視的優勢:
- 動態反映字典變化:當字典內容改變時,檢視會自動更新。
- 節省內存,提高效率:不創建數據副本,適合大型字典操作。
- 支持集合操作:方便進行鍵或值的比較和集合運算。
- 實際應用:
- 遍歷字典的鍵或值。
- 進行統計計算,如求和、最大值、最小值。
- 反轉字典的鍵和值。
- 使用集合運算比較字典。