Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

Defaultdict(set) trong Python


Defaultdict(set) là gì?

Trước tiên, hãy cùng ôn lại một chút về defaultdictset 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ỗi KeyError 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 đó.

image

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.