Dictionary trong Python: Cách dùng dict hiệu quả
Dictionary (dict) trong Python lưu dữ liệu theo cặp key–value — tra theo key, lấy value ngay, không cần duyệt từng phần tử. Đây là kiểu dữ liệu bạn sẽ dùng liên tục khi làm việc với JSON, API, hay bất kỳ dữ liệu có cấu trúc nào.
Dictionary trong Python là gì?
Dict có một vài đặc điểm cần nhớ ngay từ đầu:
- Key phải là immutable (string, int, tuple — không dùng list làm key được)
- Value có thể là bất kỳ kiểu dữ liệu nào
- Key không được trùng lặp — gán lại key cũ sẽ ghi đè
- Từ Python 3.7+, dict giữ thứ tự chèn
# Tạo dictionary cơ bản
person = {
"name": "Nguyễn An",
"age": 22,
"city": "Hà Nội"
}
print(type(person)) # <class 'dict'>
print(len(person)) # 3 (số cặp key-value)
Truy cập giá trị trong Dictionary
person = {"name": "An", "age": 22, "city": "HCM"}
# Cách 1: Dùng key trực tiếp – lỗi nếu key không tồn tại
print(person["name"]) # "An"
# Cách 2: get() – an toàn hơn, trả về None nếu không có key
print(person.get("age")) # 22
print(person.get("phone")) # None
print(person.get("phone", "Chưa có")) # "Chưa có" (giá trị mặc định)
Trong thực tế, get() là lựa chọn phổ biến hơn vì tránh được lỗi khi key chưa chắc tồn tại.
Thêm và cập nhật phần tử
person = {"name": "An", "age": 22}
# Cập nhật giá trị hiện có
person["age"] = 23
# Thêm key mới
person["email"] = "an@gmail.com"
# update() – cập nhật nhiều key cùng lúc
person.update({"age": 24, "city": "Đà Nẵng"})
Xóa phần tử khỏi Dictionary
person = {"name": "An", "age": 22, "city": "HCM"}
# pop(): xóa theo key, trả về giá trị đã xóa
city = person.pop("city") # city = "HCM"
# del: xóa theo key
del person["age"]
# clear(): xóa tất cả
person.clear() # → {}
Các phương thức Dictionary quan trọng
info = {"name": "An", "age": 22, "city": "HCM"}
# keys(): trả về tất cả keys
print(info.keys()) # dict_keys(['name', 'age', 'city'])
# values(): trả về tất cả values
print(info.values()) # dict_values(['An', 22, 'HCM'])
# items(): trả về cặp (key, value)
print(info.items()) # dict_items([('name', 'An'), ...])
# Kiểm tra key có tồn tại không
print("name" in info) # True
print("phone" in info) # False
Lặp qua Dictionary
person = {"name": "An", "age": 22, "city": "HCM"}
# Lặp qua cặp key-value (cách phổ biến nhất)
for key, value in person.items():
print(f"{key}: {value}")
# name: An
# age: 22
# city: HCM
Dict Comprehension
Tương tự list comprehension, dict comprehension giúp tạo dict gọn hơn nhiều so với vòng lặp thông thường:
# Tạo dict từ list
names = ["An", "Bình", "Cường"]
lengths = {name: len(name) for name in names}
print(lengths) # {"An": 2, "Bình": 4, "Cường": 5}
# Với điều kiện lọc
scores = {"An": 8, "Bình": 6, "Cường": 9, "Dung": 5}
passed = {name: score for name, score in scores.items() if score >= 7}
print(passed) # {"An": 8, "Cường": 9}
Dictionary và JSON
Khi làm việc với API, bạn sẽ liên tục chuyển đổi qua lại giữa Python dict và JSON string. Module json có sẵn trong Python giải quyết điều này:
import json
# Python dict → JSON string (để gửi lên API)
person = {"name": "An", "age": 22}
json_str = json.dumps(person)
print(json_str) # '{"name": "An", "age": 22}'
# JSON string → Python dict (khi nhận dữ liệu từ API)
json_data = '{"name": "An", "age": 22}'
person = json.loads(json_data)
print(person["name"]) # "An"
Bảng tổng hợp các phương thức Dictionary
| Phương thức | Mô tả | Ví dụ |
|---|---|---|
| d[key] | Lấy giá trị (lỗi nếu không có key) | d["name"] |
| d.get(key) | Lấy giá trị (None nếu không có) | d.get("name") |
| d[key] = val | Thêm/cập nhật key | d["city"] = "HN" |
| d.update(dict2) | Cập nhật nhiều key | d.update({"a": 1}) |
| d.pop(key) | Xóa key, trả về value | d.pop("name") |
| del d[key] | Xóa key | del d["name"] |
| d.clear() | Xóa tất cả | d.clear() |
| d.keys() | Tất cả keys | d.keys() |
| d.values() | Tất cả values | d.values() |
| d.items() | Tất cả cặp (key, value) | d.items() |
| key in d | Kiểm tra key tồn tại | "name" in d |