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() 方法:獲取字典中所有的值,返回 字典檢視,可迭代。
  • 字典檢視的優勢
    • 動態反映字典變化:當字典內容改變時,檢視會自動更新。
    • 節省內存,提高效率:不創建數據副本,適合大型字典操作。
    • 支持集合操作:方便進行鍵或值的比較和集合運算。
  • 實際應用
    • 遍歷字典的鍵或值。
    • 進行統計計算,如求和、最大值、最小值。
    • 反轉字典的鍵和值。
    • 使用集合運算比較字典。

延伸閱讀

Similar Posts