Defaultdict(set) là gì?
Trước tiên, hãy cùng ôn lại một chút về defaultdict
và set
trong Python:
- defaultdict: Là một subclass của
dict
cho phép bạn chỉ định một hàm tạo mặc định để cung cấp giá trị mặc định cho các key chưa tồn tại. Điều này rất hữu ích khi bạn muốn tránh lỗiKeyError
khi truy xuất đến một key không có trong dictionary. - set: Là một kiểu dữ liệu không sắp xếp, không trùng lặp. Các phần tử trong một set là duy nhất.
Khi kết hợp defaultdict
với set
, ta có defaultdict(set)
. Điều này có nghĩa là mỗi khi bạn truy cập vào một key chưa tồn tại trong dictionary, một set
rỗng sẽ tự động được tạo và gán cho key đó.
Ví dụ minh họa:
Giả sử bạn muốn tạo một dictionary để lưu trữ các từ và các từ đồng nghĩa của chúng. Với defaultdict(set)
, bạn có thể làm như sau:
from collections import defaultdict
synonyms = defaultdict(set)
synonyms['good'].add('great')
synonyms['good'].add('excellent')
synonyms['happy'].add('joyful')
synonyms['happy'].add('glad')
print(synonyms)
Kết quả.
defaultdict(<class 'set'>, {'good': {'great', 'excellent'}, 'happy': {'joyful', 'glad'}})
Như bạn thấy, chúng ta đã tạo một dictionary synonyms
mà trong đó mỗi key là một từ và giá trị tương ứng là một set
chứa các từ đồng nghĩa của nó. Khi ta thêm một từ đồng nghĩa mới, nó sẽ tự động được thêm vào set
tương ứng, ngay cả khi set
đó chưa tồn tại trước đó.
Một ví dụ khác:
Giả sử bạn có một danh sách các cặp (người, sở thích) và bạn muốn nhóm các người có cùng sở thích lại với nhau.
from collections import defaultdict
people_hobbies = defaultdict(set)
data = [
('Alice', 'reading'),
('Bob', 'coding'),
('Charlie', 'reading'),
('David', 'coding'),
('Alice', 'swimming')
]
for person, hobby in data:
people_hobbies[hobby].add(person)
print(people_hobbies)
Kết quả.
defaultdict(<class 'set'>, {'reading': {'Alice', 'Charlie'}, 'coding': {'Bob', 'David'}, 'swimming': {'Alice'}})
Tại sao nên sử dụng defaultdict(set)?
- Tránh lỗi KeyError: Bạn không cần phải kiểm tra trước xem một key đã tồn tại trong dictionary hay chưa.
- Tự động tạo giá trị mặc định: Một
set
rỗng sẽ được tự động tạo ra khi bạn truy cập vào một key chưa tồn tại. - Dễ dàng thêm phần tử: Bạn có thể dễ dàng thêm các phần tử vào
set
tương ứng của mỗi key. - Phù hợp với các bài toán đếm, phân nhóm:
defaultdict(set)
rất hữu ích trong các bài toán đếm số lần xuất hiện của một giá trị hoặc nhóm các phần tử theo một tiêu chí nào đó.
Tổng kết.
defaultdict(set)
là một công cụ rất mạnh mẽ và linh hoạt trong Python. Nó giúp bạn viết code ngắn gọn, hiệu quả và dễ đọc hơn.