Đây là trường hợp sử dụng cho collections.defaultdict
, tại đây chỉ cần sử dụng int
có thể gọi cho nhà máy mặc định.
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d
defaultdict(<class 'int'>, {})
>>> d['k'] +=1
>>> d
defaultdict(<class 'int'>, {'k': 1})
A defaultdict
được định cấu hình để tạo mục bất kỳ khi nào một phím bị thiếu được tìm kiếm. Bạn cung cấp nó với một cuộc gọi (ở đây int()
) mà nó sử dụng để tạo ra một giá trị mặc định bất cứ khi nào tra cứu với __getitem__
được chuyển qua một khóa không tồn tại. Điều này có thể gọi được lưu trữ trong một thuộc tính dụ được gọi là default_factory
.
Nếu bạn không cung cấp default_factory
, bạn sẽ nhận được KeyError
như thường lệ đối với các phím bị thiếu.
Sau đó, giả sử bạn muốn có một giá trị mặc định khác nhau, có lẽ 1 thay vì 0. Bạn chỉ đơn giản là sẽ phải vượt qua một callable cung cấp mong muốn giá trị bắt đầu của bạn, trong trường hợp này rất trivially
>>> d = defaultdict(lambda: 1)
này có thể rõ ràng cũng là bất kỳ chức năng được đặt tên thường xuyên nào.
Nó đáng chú ý tuy nhiên nếu trong trường hợp của bạn, bạn đang cố gắng để chỉ cần sử dụng một từ điển để lưu trữ số lượng các giá trị đặc biệt, một collections.Counter
là phù hợp hơn cho công việc.
>>> from collections import Counter
>>> Counter('kangaroo')
Counter({'a': 2, 'o': 2, 'n': 1, 'r': 1, 'k': 1, 'g': 1})