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

延伸閱讀

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *