Bỏ qua

Image

DICTIONARY

I. Định nghĩa và đặc điểm

1. Dictionary là gì?

Dictionary là kiểu dữ liệu lưu trữ dữ liệu dưới dạng cặp key-value (khóa-giá trị).

# Ví dụ đơn giản
sinh_vien = {
    "ten": "Nguyễn Văn A",
    "tuoi": 18,
    "lop": "12A1",
    "diem": 8.5
}

2. Đặc điểm của Dictionary

  • Lưu trữ dữ liệu dưới dạng key-value
  • Key phải là immutable (không thay đổi được)
  • Value có thể là bất kỳ kiểu dữ liệu nào
  • Không có thứ tự cố định (trước Python 3.7)
  • Key phải duy nhất

II. Tạo và khởi tạo Dictionary

1. Cú pháp cơ bản

# Cách 1: Sử dụng dấu {}
dict1 = {}
dict2 = {"key1": "value1", "key2": "value2"}

# Cách 2: Sử dụng dict()
dict3 = dict()
dict4 = dict([("key1", "value1"), ("key2", "value2")])

# Cách 3: Sử dụng từ khóa
dict5 = dict(key1="value1", key2="value2")

2. Ví dụ thực tế

# Thông tin học sinh
hoc_sinh = {
    "ma_hs": "HS001",
    "ho_ten": "Trần Thị B",
    "ngay_sinh": "15/03/2006",
    "gioi_tinh": "Nữ",
    "diem_toan": 8.5,
    "diem_van": 7.8,
    "diem_anh": 9.0
}

# Thông tin sản phẩm
san_pham = {
    "ma_sp": "SP001",
    "ten_sp": "Laptop Dell",
    "gia": 15000000,
    "so_luong": 10,
    "danh_muc": "Điện tử"
}

III. Truy cập và thao tác với Dictionary

1. Truy cập giá trị

# Truy cập bằng key
ten = hoc_sinh["ho_ten"]
diem_toan = hoc_sinh["diem_toan"]

# Sử dụng get() - an toàn hơn
diem_ly = hoc_sinh.get("diem_ly", 0)  # Trả về 0 nếu không có key

# Kiểm tra key có tồn tại
if "diem_toan" in hoc_sinh:
    print("Có điểm toán")

2. Thêm và cập nhật

Để cập nhật giá trị cho một cặp key:value có thể sử dụng phép gán hoặc thông qua phương thức update()

# Thêm key-value mới
hoc_sinh["diem_ly"] = 8.0

# Cập nhật giá trị
hoc_sinh["diem_toan"] = 9.0

# Sử dụng update()
hoc_sinh.update({"diem_hoa": 7.5, "diem_sinh": 8.2})

3. Xóa phần tử

Để xoá các phần tử trong dictionary thì có thể sử dụng từ khoá del hoặc các phương thức nhưpop(),popitem(),clear()

# Xóa bằng del
del hoc_sinh["diem_van"]

# Xóa bằng pop()
diem_anh = hoc_sinh.pop("diem_anh")

# Xóa bằng popitem() - xóa cặp cuối cùng
cuoi_cung = hoc_sinh.popitem()

# Xóa tất cả
hoc_sinh.clear()

IV. Các phương thức hữu ích

1. Phương thức keys(), values(), items()

# Lấy tất cả keys
keys = hoc_sinh.keys()
print(list(keys))

# Lấy tất cả values
values = hoc_sinh.values()
print(list(values))

# Lấy tất cả items (cặp key-value)
items = hoc_sinh.items()
print(list(items))

2. Phương thức copy()

# Copy nông
hoc_sinh_copy = hoc_sinh.copy()

V. Duyệt các phần tử trong Dictionary

1. Duyệt keys

for key in hoc_sinh:
    print(f"{key}: {hoc_sinh[key]}")

# Hoặc
for key in hoc_sinh.keys():
    print(f"{key}: {hoc_sinh[key]}")

2. Duyệt values

for value in hoc_sinh.values():
    print(value)

3. Duyệt items

for key, value in hoc_sinh.items():
    print(f"{key}: {value}")

VI. Dictionary lồng nhau

1. Dictionary trong Dictionary

# Thông tin lớp học
lop_hoc = {
    "ma_lop": "12A1",
    "si_so": 35,
    "giao_vien_cn": {
        "ten": "Nguyễn Văn C",
        "mon_day": "Toán",
        "sdt": "0123456789"
    },
    "danh_sach_hs": [
        {"ten": "HS1", "diem": 8.5},
        {"ten": "HS2", "diem": 7.8}
    ]
}

# Truy cập
ten_gv = lop_hoc["giao_vien_cn"]["ten"]

2. List trong Dictionary

# Thông tin môn học
mon_hoc = {
    "ten_mon": "Toán",
    "diem_kt": [8.5, 7.8, 9.0, 8.2],
    "diem_thi": 8.8
}

# Tính điểm trung bình
diem_tb = sum(mon_hoc["diem_kt"]) / len(mon_hoc["diem_kt"])

VII. Ví dụ minh họa

Ví dụ 1: Quản lý thông tin học sinh

Đề bài: Tạo dictionary lưu thông tin học sinh và thực hiện các thao tác cơ bản.

  1. Tạo dictionary thông tin học sinh
  2. In thông tin học sinh
  3. In điểm các môn
  4. Tính điểm trung bình
  5. Thêm điểm môn mới
  6. Cập nhật điểm
# Tạo dictionary thông tin học sinh
hoc_sinh = {
    "ma_hs": "HS001",
    "ho_ten": "Nguyễn Văn An",
    "tuoi": 16,
    "lop": "10A1",
    "diem_toan": 8.5,
    "diem_van": 7.8,
    "diem_anh": 9.0
}

# In thông tin học sinh

print("=== THÔNG TIN HỌC SINH ===")
print(f"Mã HS: {hoc_sinh['ma_hs']}")
print(f"Họ tên: {hoc_sinh['ho_ten']}")
print(f"Tuổi: {hoc_sinh['tuoi']}")
print(f"Lớp: {hoc_sinh['lop']}")

# In điểm các môn

print("\nĐiểm các môn:")
print(f"Toán: {hoc_sinh['diem_toan']}")
print(f"Văn: {hoc_sinh['diem_van']}")
print(f"Anh: {hoc_sinh['diem_anh']}")

# Tính điểm trung bình

diem_tb = (hoc_sinh['diem_toan'] + hoc_sinh['diem_van'] + hoc_sinh['diem_anh']) / 3
print(f"\nĐiểm trung bình: {diem_tb:.2f}")

# Thêm điểm môn mới

hoc_sinh['diem_ly'] = 8.2
print(f"Đã thêm điểm Lý: {hoc_sinh['diem_ly']}")

# Cập nhật điểm

hoc_sinh['diem_toan'] = 9.0
print(f"Điểm Toán mới: {hoc_sinh['diem_toan']}")

Ví dụ 2: Quản lý kho hàng

Đề bài: Tạo dictionary lưu thông tin sản phẩm và tính toán giá trị kho.

  1. Tạo dictionary sản phẩm
  2. Hiển thị thông tin sản phẩm
  3. Tính tổng giá trị
  4. Nhập hàng thêm
  5. Tính lại tổng giá trị
# Tạo dictionary sản phẩm
san_pham = {
    "ma_sp": "SP001",
    "ten_sp": "Laptop Dell",
    "gia": 15000000,
    "so_luong": 5,
    "danh_muc": "Điện tử"
}

# Hiển thị thông tin sản phẩm
print("=== THÔNG TIN SẢN PHẨM ===")
print(f"Mã SP: {san_pham['ma_sp']}")
print(f"Tên SP: {san_pham['ten_sp']}")
print(f"Giá: {san_pham['gia']:,} VNĐ")
print(f"Số lượng: {san_pham['so_luong']}")
print(f"Danh mục: {san_pham['danh_muc']}")

# Tính tổng giá trị
tong_gia_tri = san_pham['gia'] * san_pham['so_luong']
print(f"\nTổng giá trị: {tong_gia_tri:,} VNĐ")

# Nhập hàng thêm
them_so_luong = 3
san_pham['so_luong'] += them_so_luong
print(f"Đã nhập thêm {them_so_luong} sản phẩm")
print(f"Số lượng mới: {san_pham['so_luong']}")

# Tính lại tổng giá trị
tong_gia_tri_moi = san_pham['gia'] * san_pham['so_luong']
print(f"Tổng giá trị mới: {tong_gia_tri_moi:,} VNĐ")

Ví dụ 3: Từ điển Anh-Việt

Đề bài: Tạo từ điển đơn giản và thực hiện tra cứu từ.

  1. Tạo từ điển Anh-Việt
  2. Hiển thị toàn bộ từ điển
  3. Tra cứu từ
  4. Thêm từ mới
  5. Đếm số từ trong từ điển
  6. Tìm từ dài nhất
# Tạo từ điển Anh-Việt
tu_dien = {
    "hello": "xin chào",
    "goodbye": "tạm biệt", 
    "thank you": "cảm ơn",
    "please": "xin vui lòng",
    "sorry": "xin lỗi",
    "computer": "máy tính",
    "student": "học sinh",
    "teacher": "giáo viên",
    "book": "sách",
    "school": "trường học"
}

# Hiển thị toàn bộ từ điển
print("=== TỪ ĐIỂN ANH-VIỆT ===")
for tu_anh, tu_viet in tu_dien.items():
    print(f"{tu_anh}: {tu_viet}")

# Tra cứu từ
print("\n=== TRA CỨU TỪ ===")
tu_can_tra = "computer"
if tu_can_tra in tu_dien:
    print(f"{tu_can_tra}: {tu_dien[tu_can_tra]}")
else:
    print(f"Không tìm thấy từ '{tu_can_tra}'")

# Thêm từ mới
tu_dien["python"] = "trăn (ngôn ngữ lập trình)"
print(f"\nĐã thêm từ mới: python - {tu_dien['python']}")

# Đếm số từ trong từ điển
so_tu = len(tu_dien)
print(f"\nTổng số từ trong từ điển: {so_tu}")

# Tìm từ dài nhất
tu_dai_nhat = max(tu_dien.keys(), key=len)
print(f"Từ dài nhất: {tu_dai_nhat} ({len(tu_dai_nhat)} ký tự)")

VIII. Bài tập thực hành tại lớp

Bài 1: Dictionary thông tin học sinh

Đề bài: Tạo dictionary lưu thông tin 3 học sinh và hiển thị.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary lồng nhau với mã học sinh làm key
  2. Mỗi value là dictionary chứa thông tin chi tiết
  3. Sử dụng vòng lặp để duyệt và hiển thị
  4. Format thông tin đẹp mắt khi in

Input/Output mẫu:

Mã HS Tên Tuổi Lớp
HS001 An 16 10A1
HS002 Bình 17 10A2
HS003 Cường 16 10A1
💡 Gợi ý code
# Dictionary thông tin học sinh
hoc_sinh = {
    "HS001": {"ten": "An", "tuoi": 16, "lop": "10A1"},
    "HS002": {"ten": "Bình", "tuoi": 17, "lop": "10A2"},
    "HS003": {"ten": "Cường", "tuoi": 16, "lop": "10A1"}
}

# Hiển thị thông tin
for ma_hs, thong_tin in hoc_sinh.items():
    print(f"{ma_hs}: {thong_tin['ten']}, {thong_tin['tuoi']} tuổi, lớp {thong_tin['lop']}")

Bài 2: Tính điểm trung bình

Đề bài: Tạo dictionary lưu điểm các môn học và tính điểm trung bình.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary với key là tên môn, value là điểm số
  2. Sử dụng phương thức values() để lấy tất cả điểm
  3. Tính tổng bằng sum() và chia cho len()
  4. Làm tròn kết quả 2 chữ số thập phân

Input/Output mẫu:

Môn học Điểm Tính toán
Toán 8.5 sum = 25.3
Văn 7.8 len = 3
Anh 9.0 TB = 8.43
💡 Gợi ý code
# Dictionary điểm các môn
diem = {"Toán": 8.5, "Văn": 7.8, "Anh": 9.0}

# Tính điểm trung bình
diem_tb = sum(diem.values()) / len(diem)

print(f"Điểm trung bình: {diem_tb:.2f}")

Bài 3: Tính tổng giá trị sản phẩm

Đề bài: Tạo dictionary lưu thông tin sản phẩm và tính tổng giá trị.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary chứa thông tin sản phẩm (tên, giá, số lượng)
  2. Truy cập giá và số lượng bằng key
  3. Tính tổng giá trị = giá × số lượng
  4. Có thể mở rộng cho nhiều sản phẩm

Input/Output mẫu:

Sản phẩm Giá Số lượng Tổng giá trị
Laptop 15,000,000 2 30,000,000
💡 Gợi ý code
# Dictionary thông tin sản phẩm
san_pham = {
    "SP1": {"ten": "Laptop", "gia": 15000000, "sl": 2}
}

# Tính tổng giá trị
tong = san_pham["SP1"]["gia"] * san_pham["SP1"]["sl"]

print(f"Tổng giá trị: {tong:,} VND")

IX. Bài tập về nhà

Bài 1: Thông tin cá nhân

Đề bài: Tạo dictionary lưu thông tin cá nhân của bạn gồm: tên, tuổi, lớp, môn học yêu thích, điểm môn đó. In ra thông tin và tính xem bạn đã đủ 18 tuổi chưa.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary với 5 key: tên, tuổi, lớp, môn yêu thích, điểm
  2. Sử dụng vòng lặp items() để duyệt và in thông tin
  3. Kiểm tra tuổi >= 18 bằng câu lệnh if-else
  4. Format hiển thị thông tin rõ ràng và đẹp mắt

Input/Output mẫu:

Thông tin Giá trị Kết luận
Tuổi: 16 < 18 Chưa đủ 18 tuổi
Tuổi: 19 >= 18 Đã đủ 18 tuổi

Bài 2: Điểm số các môn học

Đề bài: Tạo dictionary lưu điểm 5 môn học của bạn. Tính điểm trung bình, tìm môn có điểm cao nhất và thấp nhất.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary với key là tên môn, value là điểm số
  2. Tính điểm trung bình: sum(values()) / len()
  3. Tìm điểm cao nhất: max(dict, key=dict.get)
  4. Tìm điểm thấp nhất: min(dict, key=dict.get)
  5. Hiển thị bảng điểm và các thống kê

Input/Output mẫu:

Môn Điểm Thống kê
Toán: 8.5 Trung bình: 8.2
Anh: 9.0 Cao nhất: Anh (9.0)
Hóa: 7.5 Thấp nhất: Hóa (7.5)

Bài 3: Danh bạ điện thoại

Đề bài: Tạo dictionary lưu tên và số điện thoại của 5 người bạn. Viết chương trình cho phép tra cứu số điện thoại theo tên.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary với key là tên, value là số điện thoại
  2. Nhập tên cần tra cứu từ bàn phím
  3. Sử dụng get() để tra cứu (an toàn hơn truy cập trực tiếp)
  4. Hiển thị kết quả hoặc thông báo không tìm thấy
  5. Có thể hiển thị toàn bộ danh bạ

Input/Output mẫu:

Tìm kiếm Kết quả
"An" An: 0123456789
"Nam" Không tìm thấy Nam!

Bài 4: Menu quán ăn

Đề bài: Tạo dictionary menu quán ăn với tên món và giá. Khách hàng chọn món, nhập số lượng, tính tổng tiền phải trả.

💡 Phân tích đề

Các bước thực hiện:

  1. Dictionary với key là tên món, value là giá
  2. Nhập tên món và số lượng
  3. Tính tổng = giá × số lượng
  4. Kiểm tra món có trong menu không

Gợi ý input/output mẫu:

--- MENU QUÁN ĂN ---
Phở bò: 45,000 VNĐ
Cơm tấm: 35,000 VNĐ
Bánh mì: 20,000 VNĐ
Chả cá: 50,000 VNĐ

Nhập tên món: Phở bò
Nhập số lượng: 2
Tổng tiền: 90,000 VNĐ

Nhập tên món: Pizza
Món này không có trong menu!

X. Bài tập nâng cao

Bài 1: Quản lý thông tin học sinh

Đề bài: Viết chương trình quản lý thông tin học sinh với menu gồm các chức năng: thêm học sinh mới, hiển thị thông tin học sinh, cập nhật điểm, hiển thị danh sách tất cả học sinh và thoát chương trình.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary chính để lưu tất cả học sinh với mã HS làm key
  2. Tạo menu với 5 lựa chọn và vòng lặp while để chạy liên tục
  3. Thêm học sinh: nhập thông tin và lưu vào dictionary
  4. Hiển thị thông tin: tìm theo mã HS và in ra
  5. Cập nhật điểm: tìm HS và thêm/sửa điểm các môn
  6. Hiển thị tất cả: duyệt dictionary và in thông tin
  7. Thoát: break khỏi vòng lặp

Input/Output mẫu:

Chức năng Input Output
Thêm HS HS001, An, 16, 10A1 Đã thêm thành công
Hiển thị HS001 Thông tin chi tiết HS001
Cập nhật HS001, Toán: 8.5 Đã cập nhật điểm
Danh sách Tất cả học sinh

Bài 2: Quản lý kho hàng

Đề bài: Viết chương trình quản lý kho hàng với các chức năng: thêm sản phẩm mới, tìm kiếm sản phẩm, cập nhật số lượng, xóa sản phẩm, hiển thị toàn bộ kho và tính tổng giá trị kho.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary kho hàng với mã sản phẩm làm key
  2. Mỗi sản phẩm có thông tin: tên, giá, số lượng
  3. Tạo menu với 6 lựa chọn chính
  4. Thêm sản phẩm: nhập thông tin và kiểm tra trùng mã
  5. Tìm kiếm: tra cứu theo mã sản phẩm
  6. Cập nhật số lượng: thay đổi số lượng tồn kho
  7. Xóa sản phẩm: xóa khỏi dictionary
  8. Hiển thị kho: duyệt và in tất cả sản phẩm
  9. Tính tổng giá trị: sum(giá × số lượng) của tất cả SP

Input/Output mẫu:

Chức năng Input Công thức Output
Thêm SP SP001, Laptop, 15M, 5 Đã thêm thành công
Tìm kiếm SP001 Thông tin chi tiết SP001
Cập nhật SL SP001, +3 5 + 3 = 8 Số lượng mới: 8
Tổng giá trị Σ(giá × SL) 150,000,000 VNĐ

Bài 3: Từ điển Anh-Việt

Đề bài: Viết chương trình từ điển Anh-Việt với các chức năng: tra cứu từ, thêm từ mới, xóa từ, hiển thị tất cả từ và tìm kiếm từ có chứa chuỗi con.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary từ điển với từ tiếng Anh làm key
  2. Value là nghĩa tiếng Việt tương ứng
  3. Tra cứu từ: kiểm tra key có tồn tại trong dictionary
  4. Thêm từ: nhập từ mới và nghĩa, lưu vào dictionary
  5. Xóa từ: sử dụng del hoặc pop() để xóa
  6. Hiển thị tất cả: duyệt items() và in ra
  7. Tìm chuỗi con: duyệt keys() và kiểm tra 'in' operator
  8. Chuyển về chữ thường để so sánh không phân biệt hoa thường

Input/Output mẫu:

Chức năng Input Công thức Output
Tra cứu "hello" dict.get(key) hello = xin chào
Thêm từ "python", "trăn" dict[key] = value Đã thêm thành công
Tìm chuỗi "com" substring in key computer, welcome
Xóa từ "hello" del dict[key] Đã xóa thành công

Bài 4: Quản lý thông tin sách

Đề bài: Viết chương trình quản lý thư viện sách với các thuộc tính: mã sách, tên sách, tác giả, năm xuất bản, giá. Các chức năng: thêm, tìm kiếm, sắp xếp theo giá, lọc theo năm xuất bản.

💡 Phân tích đề

Các bước thực hiện:

  1. Tạo dictionary chính với mã sách làm key
  2. Mỗi sách có dictionary con chứa: tên, tác giả, năm XB, giá
  3. Thêm sách: nhập đầy đủ thông tin và lưu vào dictionary
  4. Tìm kiếm: tra cứu theo mã sách hoặc theo tên
  5. Sắp xếp theo giá: chuyển items() thành list, dùng sorted()
  6. Lọc theo năm: duyệt dictionary và kiểm tra năm xuất bản
  7. Hiển thị: format thông tin sách đẹp mắt
  8. Tính thống kê: giá trung bình, sách đắt nhất, rẻ nhất

Input/Output mẫu:

Chức năng Input Công thức Output
Thêm sách S001, Python, Tác giả A, 2023, 250K Đã thêm thành công
Sắp xếp giá sorted(items, key=lambda x: x[1]['gia']) Danh sách theo giá tăng dần
Lọc năm 2023 if sach['nam'] == 2023 Sách xuất bản năm 2023
Giá TB sum(gia) / len(sach) Giá trung bình: 300K

XI. Ghi chú quan trọng

1. Cú pháp cơ bản

  • Sử dụng {} để tạo dictionary
  • Key phải là immutable (string, number, tuple)
  • Value có thể là bất kỳ kiểu dữ liệu nào
  • Truy cập bằng key: dict[key]

2. Lưu ý khi sử dụng

  • Key phải duy nhất
  • Sử dụng get() để tránh lỗi KeyError
  • Dictionary có thể lồng nhau
  • Có thể duyệt bằng for loop

3. Các lỗi thường gặp

  • KeyError khi truy cập key không tồn tại
  • Quên dấu phẩy giữa các cặp key-value
  • Sử dụng key không immutable