Bỏ qua để đến nội dung

Từ điển (Dictionary)

Dictionary là một cấu trúc dữ liệu cho phép lưu trữ các cặp key-value (khoá-giá trị). Hãy tưởng tượng nó giống như một cuốn từ điển thật:

  • Key (khoá) là từ bạn cần tra
  • Value (giá trị) là nghĩa của từ đó

Dictionary có những đặc điểm sau:

  • Có thể thay đổi (mutable): Bạn có thể thêm, sửa, xoá các phần tử
  • Không có thứ tự cố định (từ Python 3.7+ thì giữ thứ tự thêm vào)
  • Key phải là duy nhất: Không có hai key giống nhau

Ví dụ về tính chất mutable (có thể thay đổi)

Phần tiêu đề “Ví dụ về tính chất mutable (có thể thay đổi)”
pet = {"name": "Miu", "type": "cat"}
# Thêm phần tử mới
pet["age"] = 2
print(pet) # {"name": "Miu", "type": "cat", "age": 2}
# Sửa giá trị
pet["name"] = "Bông"
print(pet) # {"name": "Bông", "type": "cat", "age": 2}
# Xoá phần tử
del pet["age"]
print(pet) # {"name": "Bông", "type": "cat"}

Ví dụ về thứ tự (giữ thứ tự thêm vào từ Python 3.7+)

Phần tiêu đề “Ví dụ về thứ tự (giữ thứ tự thêm vào từ Python 3.7+)”
colors = {}
colors["red"] = "đỏ"
colors["blue"] = "xanh dương"
colors["green"] = "xanh lá"
# Thứ tự in ra giống thứ tự thêm vào
for key, value in colors.items():
print(f"{key}: {value}")
# red: đỏ
# blue: xanh dương
# green: xanh lá

Ví dụ về key duy nhất (không có hai key giống nhau)

Phần tiêu đề “Ví dụ về key duy nhất (không có hai key giống nhau)”
# Nếu có key trùng, giá trị sau sẽ ghi đè giá trị trước
student = {
"name": "Minh",
"age": 10,
"name": "An" # Key "name" bị trùng
}
print(student) # {"name": "An", "age": 10} - chỉ giữ giá trị cuối

Ví dụ dictionary hợp lệ:

student = {
"name": "Minh Anh",
"age": 10,
"grade": 5
}
fruits_price = {
"apple": 15000,
"banana": 10000,
"orange": 20000
}
student = {
"name": "Tuệ Nghi",
"age": 11,
"school": "Trường Tiểu học ABC"
}
scores = {
"math": 9.5,
"literature": 8.0,
"english": 9.0
}
empty_dict = {}
another_empty_dict = dict()
student = dict(name="Bảo Nguyên", age=10, grade=5)
# Kết quả: {"name": "Bảo Nguyên", "age": 10, "grade": 5}
student = {"name": "Phước Sâm", "age": 11, "grade": 5}
len(student) # 3
student = {"name": "Minh Sang", "age": 10}
# Cách 1: Dùng dấu ngoặc vuông []
print(student["name"]) # "Minh Sang"
# Cách 2: Dùng phương thức get()
print(student.get("age")) # 10

Lưu ý: Nếu key không tồn tại:

  • Dùng [] sẽ gây lỗi
  • Dùng get() sẽ trả về None hoặc giá trị mặc định
student = {"name": "Đức Sơn"}
# print(student["age"]) # Lỗi! Không có key "age"
print(student.get("age")) # None
print(student.get("age", 0)) # 0 (giá trị mặc định)
student = {"name": "Bảo Đăng", "age": 11}
if "name" in student:
print("Có thông tin tên")
if "phone" not in student:
print("Không có số điện thoại")
student = {"name": "Hồng Phúc", "age": 10}
# Thêm key mới
student["grade"] = 5
print(student) # {"name": "Hồng Phúc", "age": 10, "grade": 5}
# Thay đổi giá trị của key đã có
student["age"] = 11
print(student) # {"name": "Hồng Phúc", "age": 11, "grade": 5}
student = {"name": "Gia Hưng", "age": 10, "grade": 5}
# Xoá theo key bằng del
del student["grade"]
print(student) # {"name": "Gia Hưng", "age": 10}
# Xoá và lấy giá trị bằng pop()
age = student.pop("age")
print(age) # 10
print(student) # {"name": "Gia Hưng"}

4. Các phương thức quan trọng của Dictionary

Phần tiêu đề “4. Các phương thức quan trọng của Dictionary”
Phương thứcChức năngVí dụ
get(key)Lấy giá trị của keystudent.get("name")
keys()Lấy tất cả các keystudent.keys()
values()Lấy tất cả các valuestudent.values()
items()Lấy tất cả cặp key-valuestudent.items()
update(dict2)Cập nhật từ dictionary khácstudent.update({"age": 11})
pop(key)Xoá và trả về giá trị của keystudent.pop("age")
clear()Xoá toàn bộ dictionarystudent.clear()
copy()Tạo bản saonew_dict = student.copy()

Ví dụ: student = {"name": "Hoàng Thịnh", "age": 10, "grade": 5}

Phần tiêu đề “Ví dụ: student = {"name": "Hoàng Thịnh", "age": 10, "grade": 5}”
student = {"name": "Hoàng Thịnh", "age": 10, "grade": 5}
name = student.get("name")
print(name) # "Hoàng Thịnh"
# Có thể đặt giá trị mặc định nếu key không tồn tại
phone = student.get("phone", "Chưa có")
print(phone) # "Chưa có"
student = {"name": "Trọng Phát", "age": 11, "grade": 5}
keys = student.keys()
print(keys) # dict_keys(["name", "age", "grade"])
print(list(keys)) # ["name", "age", "grade"]
student = {"name": "Tuệ Nghi", "age": 10, "grade": 5}
values = student.values()
print(values) # dict_values(["Tuệ Nghi", 10, 5])
print(list(values)) # ["Tuệ Nghi", 10, 5]
student = {"name": "Minh Sang", "age": 11}
items = student.items()
print(items) # dict_items([("name", "Minh Sang"), ("age", 11)])

5. update(dict2) - Cập nhật từ dictionary khác

Phần tiêu đề “5. update(dict2) - Cập nhật từ dictionary khác”
student = {"name": "Phước Sâm", "age": 10}
student.update({"grade": 5, "school": "ABC"})
print(student)
# {"name": "Phước Sâm", "age": 10, "grade": 5, "school": "ABC"}
# Cũng có thể cập nhật giá trị đã có
student.update({"age": 11})
print(student) # age đã đổi thành 11
student = {"name": "Bảo Nguyên", "age": 10, "grade": 5}
age = student.pop("age")
print(age) # 10
print(student) # {"name": "Bảo Nguyên", "grade": 5}
student = {"name": "Đức Sơn", "age": 11}
student.clear()
print(student) # {}
student1 = {"name": "Bảo Đăng", "age": 10}
student2 = student1.copy()
student2["age"] = 11
print(student1) # {"name": "Bảo Đăng", "age": 10} - không bị thay đổi
print(student2) # {"name": "Bảo Đăng", "age": 11}
student = {"name": "Hồng Phúc", "age": 10, "grade": 5}
for key in student:
print(key)
# name
# age
# grade

Hoặc dùng keys():

for key in student.keys():
print(key)
student = {"name": "Gia Hưng", "age": 11, "grade": 5}
for value in student.values():
print(value)
# Gia Hưng
# 11
# 5
student = {"name": "Hoàng Thịnh", "age": 10, "grade": 5}
for key, value in student.items():
print(f"{key}: {value}")
# name: Hoàng Thịnh
# age: 10
# grade: 5

Dictionary có thể chứa dictionary khác bên trong:

students = {
"student1": {
"name": "Trọng Phát",
"age": 10,
"grade": 5
},
"student2": {
"name": "Tuệ Nghi",
"age": 11,
"grade": 5
}
}
# Truy cập thông tin
print(students["student1"]["name"]) # "Trọng Phát"
print(students["student2"]["age"]) # 11
scores = {
"math": 9.5,
"literature": 8.0,
"english": 9.0,
"science": 8.5
}
# Tính điểm trung bình
total = sum(scores.values())
average = total / len(scores)
print(f"Điểm trung bình: {average}")

Ví dụ 2: Đếm số lần xuất hiện của từ

Phần tiêu đề “Ví dụ 2: Đếm số lần xuất hiện của từ”
text = "python is fun python is easy"
words = text.split()
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count)
# {"python": 2, "is": 2, "fun": 1, "easy": 1}
phonebook = {
"Minh Sang": "0901234567",
"Phước Sâm": "0907654321",
"Bảo Nguyên": "0909876543"
}
# Tìm số điện thoại
name = "Minh Sang"
if name in phonebook:
print(f"Số điện thoại của {name}: {phonebook[name]}")
else:
print("Không tìm thấy")
Đặc điểmListDictionary
Cấu trúcDanh sách có thứ tựCặp key-value
Truy cậpDùng index (số)Dùng key
Thứ tựCó thứ tự rõ ràngGiữ thứ tự thêm vào (Python 3.7+)
Tìm kiếmChậm hơnNhanh hơn
Dùng khi nàoLưu danh sách các phần tửLưu thông tin có thuộc tính

Sau khi học xong bài này, hãy thực hành với các bài tập sau: