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.
- Tạo dictionary thông tin học sinh
- In thông tin học sinh
- In điểm các môn
- Tính điểm trung bình
- Thêm điểm môn mới
- 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.
- Tạo dictionary sản phẩm
- Hiển thị thông tin sản phẩm
- Tính tổng giá trị
- Nhập hàng thêm
- 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ừ.
- Tạo từ điển Anh-Việt
- Hiển thị toàn bộ từ điển
- Tra cứu từ
- Thêm từ mới
- Đếm số từ trong từ điển
- 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:
- Tạo dictionary lồng nhau với mã học sinh làm key
- Mỗi value là dictionary chứa thông tin chi tiết
- Sử dụng vòng lặp để duyệt và hiển thị
- 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:
- Tạo dictionary với key là tên môn, value là điểm số
- Sử dụng phương thức values() để lấy tất cả điểm
- Tính tổng bằng sum() và chia cho len()
- 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:
- Tạo dictionary chứa thông tin sản phẩm (tên, giá, số lượng)
- Truy cập giá và số lượng bằng key
- Tính tổng giá trị = giá × số lượng
- 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:
- Tạo dictionary với 5 key: tên, tuổi, lớp, môn yêu thích, điểm
- Sử dụng vòng lặp items() để duyệt và in thông tin
- Kiểm tra tuổi >= 18 bằng câu lệnh if-else
- 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:
- Tạo dictionary với key là tên môn, value là điểm số
- Tính điểm trung bình: sum(values()) / len()
- Tìm điểm cao nhất: max(dict, key=dict.get)
- Tìm điểm thấp nhất: min(dict, key=dict.get)
- 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:
- Tạo dictionary với key là tên, value là số điện thoại
- Nhập tên cần tra cứu từ bàn phím
- Sử dụng get() để tra cứu (an toàn hơn truy cập trực tiếp)
- Hiển thị kết quả hoặc thông báo không tìm thấy
- 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:
- Dictionary với key là tên món, value là giá
- Nhập tên món và số lượng
- Tính tổng = giá × số lượng
- 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:
- Tạo dictionary chính để lưu tất cả học sinh với mã HS làm key
- Tạo menu với 5 lựa chọn và vòng lặp while để chạy liên tục
- Thêm học sinh: nhập thông tin và lưu vào dictionary
- Hiển thị thông tin: tìm theo mã HS và in ra
- Cập nhật điểm: tìm HS và thêm/sửa điểm các môn
- Hiển thị tất cả: duyệt dictionary và in thông tin
- 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:
- Tạo dictionary kho hàng với mã sản phẩm làm key
- Mỗi sản phẩm có thông tin: tên, giá, số lượng
- Tạo menu với 6 lựa chọn chính
- Thêm sản phẩm: nhập thông tin và kiểm tra trùng mã
- Tìm kiếm: tra cứu theo mã sản phẩm
- Cập nhật số lượng: thay đổi số lượng tồn kho
- Xóa sản phẩm: xóa khỏi dictionary
- Hiển thị kho: duyệt và in tất cả sản phẩm
- 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:
- Tạo dictionary từ điển với từ tiếng Anh làm key
- Value là nghĩa tiếng Việt tương ứng
- Tra cứu từ: kiểm tra key có tồn tại trong dictionary
- Thêm từ: nhập từ mới và nghĩa, lưu vào dictionary
- Xóa từ: sử dụng del hoặc pop() để xóa
- Hiển thị tất cả: duyệt items() và in ra
- Tìm chuỗi con: duyệt keys() và kiểm tra 'in' operator
- 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:
- Tạo dictionary chính với mã sách làm key
- Mỗi sách có dictionary con chứa: tên, tác giả, năm XB, giá
- Thêm sách: nhập đầy đủ thông tin và lưu vào dictionary
- Tìm kiếm: tra cứu theo mã sách hoặc theo tên
- Sắp xếp theo giá: chuyển items() thành list, dùng sorted()
- Lọc theo năm: duyệt dictionary và kiểm tra năm xuất bản
- Hiển thị: format thông tin sách đẹp mắt
- 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