Defaultdict trong Python
Category: Python
Trong Python, defaultdict là một lớp con của lớp dict tích hợp từ mô-đun collections. Nó được sử dụng để cung cấp giá trị mặc định cho một khóa không tồn tại trong từ điển, loại bỏ nhu cầu kiểm tra xem khóa có tồn tại hay không trước khi sử dụng.
Các tính năng chính của defaultdict:
Khi chúng ta truy cập một khóa không tồn tại trong từ điển, defaultdict sẽ tự động tạo khóa đó và gán cho nó một giá trị mặc định dựa trên hàm chúng ta cung cấp.
Chúng ta cần chỉ định kiểu giá trị mặc định bằng cách truyền một hàm (như int, list hoặc set) khi khởi tạo defaultdict.
Ví dụ:
from collections import defaultdict
d = defaultdict(list)
d['fruits'].append('apple')
d['vegetables'].append('carrot')
print(d)
print(d['juices'])
Đầu ra:
defaultdict(<class 'list'>, {'fruits': ['apple'], 'vegetables': ['carrot']})
[]
Giải thích: Mã này tạo một defaultdict với giá trị mặc định là một danh sách rỗng. Nó thêm các phần tử vào khóa 'fruits' và 'vegetables' . Khi cố gắng truy cập khóa 'juices' , không có KeyError nào được đưa ra và một danh sách rỗng được trả về vì nó không tồn tại trong từ điển.
Cú pháp của DefaultDict trong Python
defaultdict(hàm tạo mặc định)
Các thông số:
default_factory: Một hàm trả về giá trị mặc định cho từ điển được xác định. Nếu đối số này không có thì từ điển sẽ đưa ra lỗi KeyError.
Giá trị trả về: Trả về một đối tượng giống như từ điển tự động cung cấp giá trị mặc định cho các khóa bị thiếu, dựa trên lệnh gọi được chỉ định, thay vì đưa ra lỗi KeyError.
defaultdict hoạt động như thế nào?
Khi defaultdict được tạo, bạn chỉ định một hàm nhà máy sẽ cung cấp giá trị mặc định cho các khóa mới. Hàm nhà máy này có thể là int, list, str hoặc bất kỳ đối tượng có thể gọi nào khác. Ví dụ:
Sử dụng int: Nếu bạn sử dụng int làm hàm gốc, giá trị mặc định sẽ là 0 (vì int() trả về 0).
Sử dụng danh sách: Nếu bạn sử dụng danh sách làm hàm gốc, giá trị mặc định sẽ là danh sách rỗng ([]).
Sử dụng str: Nếu bạn sử dụng str, giá trị mặc định sẽ là một chuỗi rỗng ('').
Hàm tạo mặc định trong Python dict là gì?
Đây là hàm trả về giá trị mặc định cho từ điển được xác định. Nếu đối số này không có thì từ điển sẽ đưa ra lỗi KeyError.
from collections import defaultdict
# Định nghĩa dict và truyền lambda làm đối số default_factory
d = defaultdict(lambda: "Not Present")
d["a"] = 1
d["b"] = 2
print(d["a"])
print(d["b"])
print(d["c"])
Đầu ra:
1
2
Not Present
Các trường hợp sử dụng cho defaultdict
1. Sử dụng List làm Factory mặc định
Khi lớp danh sách được truyền dưới dạng đối số default_factory, thì defaultdict sẽ được tạo với các giá trị trong danh sách.
from collections import defaultdict
d = defaultdict(list)
for i in range(5):
d[i].append(i)
print("Dictionary with values as list:")
print(d)
Đầu ra:
Dictionary with values as list:
defaultdict(<class 'list'>, {0: [0], 1: [1], 2: [2], 3: [3], 4: [4]})
Giải thích: Ví dụ này minh họa việc sử dụng list làm factory mặc định. Một defaultdict được tạo bằng list, nghĩa là bất kỳ key nào bị thiếu sẽ tự động có một list rỗng làm giá trị của nó. Vòng lặp sẽ thêm giá trị của i vào list của key tương ứng.
2. Sử dụng int Default Factory
Khi lớp int được truyền dưới dạng đối số default_factory, thì defaultdict được tạo với giá trị mặc định là 0.
from collections import defaultdict
d = defaultdict(int)
a = [1, 2, 3, 4, 2, 4, 1, 2]
for i in a:
d[i] += 1
print(d)
Đầu ra:
defaultdict(<class 'int'>, {1: 2, 2: 3, 3: 1, 4: 2})
Giải thích: Ví dụ này sử dụng int làm hàm tạo mặc định. int() trả về 0 , do đó các khóa bị thiếu sẽ có giá trị mặc định là 0. Vòng lặp đếm số lần xuất hiện của mỗi số trong danh sách a và cập nhật từ điển cho phù hợp.
3. Sử dụng str Default Factory
Khi lớp str được truyền dưới dạng đối số default_factory.
from collections import defaultdict
# Sử dụng str làm hàm nhà máy
sd = defaultdict(str)
sd['greeting'] = 'Hello'
print(sd)
Đầu ra:
defaultdict(<class 'str'>, {'greeting': 'Hello'})
Giải thích: Ví dụ này sử dụng str làm factory mặc định. str() trả về một chuỗi rỗng, do đó các khóa bị thiếu sẽ có một chuỗi rỗng làm giá trị mặc định. Giá trị (' Hello ') được thiết lập rõ ràng cho khóa ' greeting '.
Python defaultdict Kiểu để Xử lý các Khóa bị Thiếu
Defaultdict thêm một biến thể hiện có thể ghi và một phương thức ngoài các hoạt động từ điển chuẩn. Biến thể hiện là tham số default_factory và phương thức được cung cấp là missing .
Hàm này được sử dụng để cung cấp giá trị mặc định cho từ điển. Nó lấy default_factory làm đối số và nếu đối số này là None , KeyError sẽ được đưa ra, nếu không, nó sẽ cung cấp giá trị mặc định cho khóa đã cho. Phương pháp này về cơ bản được gọi bởi phương pháp getitem() của lớp dict khi không tìm thấy khóa được yêu cầu. getitem() đưa ra hoặc trả về giá trị được trả về bởi phương pháp missing() .
from collections import defaultdict
d = defaultdict(lambda: "Not Present")
d["a"] = 1
d["b"] = 2
print(d.__missing__('a'))
print(d.__missing__('d'))
Đầu ra:
Not Present
Not Present
Giải thích:
defaultdict được khởi tạo bằng hàm lambda trả về " Not Present " cho các khóa bị thiếu .
Khi khóa ' a ' được truy cập, giá trị của nó được trả về ( 1 ) và missing không được gọi.
Khi truy cập khóa ' d ' (không tồn tại), missing sẽ được kích hoạt và giá trị mặc định " Not Present " sẽ được trả về.
Published on Jun 19, 2025