Hướng dẫn dùng defaultdict python python

mặc định

"Từ điển tiêu chuẩn bao gồm phương thức setdefault () để truy xuất giá trị và thiết lập mặc định nếu giá trị không tồn tại. Ngược lại, hãy defaultdictđể người gọi chỉ định mặc định (giá trị được trả về) ở phía trước khi container được khởi tạo."

như được định nghĩa bởi Doug Hellmann trong Thư viện tiêu chuẩn Python theo ví dụ

Cách sử dụng defaultdict

Nhập defaultdict

>>> from collections import defaultdict

Khởi tạo defaultdict

Khởi tạo nó bằng cách vượt qua

có thể gọi là đối số đầu tiên của nó (bắt buộc)

>>> d_int = defaultdict(int)
>>> d_list = defaultdict(list)
>>> def foo():
...     return 'default value'
... 
>>> d_foo = defaultdict(foo)
>>> d_int
defaultdict(<type 'int'>, {})
>>> d_list
defaultdict(<type 'list'>, {})
>>> d_foo
defaultdict(<function foo at 0x7f34a0a69578>, {})

** kwargs là đối số thứ hai của nó (tùy chọn)

>>> d_int = defaultdict(int, a=10, b=12, c=13)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})

hoặc là

>>> kwargs = {'a':10,'b':12,'c':13}
>>> d_int = defaultdict(int, **kwargs)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})

Nó làm việc như thế nào

Là một lớp con của từ điển chuẩn, nó có thể thực hiện tất cả các chức năng tương tự.

Nhưng trong trường hợp truyền một khóa không xác định, nó sẽ trả về giá trị mặc định thay vì lỗi. Ví dụ:

>>> d_int['a']
10
>>> d_int['d']
0
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12, 'd': 0})

Trong trường hợp bạn muốn thay đổi giá trị mặc định, hãy ghi đè default_factory:

>>> d_int.default_factory = lambda: 1
>>> d_int['e']
1
>>> d_int
defaultdict(<function <lambda> at 0x7f34a0a91578>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0})

hoặc là

>>> def foo():
...     return 2
>>> d_int.default_factory = foo
>>> d_int['f']
2
>>> d_int
defaultdict(<function foo at 0x7f34a0a0a140>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0, 'f': 2})

Ví dụ trong câu hỏi

ví dụ 1

Vì int đã được truyền dưới dạng default_factory, bất kỳ khóa không xác định nào sẽ trả về 0 theo mặc định.

Bây giờ khi chuỗi được truyền trong vòng lặp, nó sẽ tăng số lượng các bảng chữ cái đó trong d.

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> d.default_factory
<type 'int'>
>>> for k in s:
...     d[k] += 1
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
>>> d
defaultdict(<type 'int'>, {'i': 4, 'p': 2, 's': 4, 'm': 1})

Ví dụ 2

Vì một danh sách đã được truyền dưới dạng default_factory, bất kỳ khóa không xác định (không tồn tại) nào sẽ trả về [] (tức là danh sách) theo mặc định.

Bây giờ khi danh sách các bộ dữ liệu được truyền trong vòng lặp, nó sẽ nối thêm giá trị trong d [color]

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> d.default_factory
<type 'list'>
>>> for k, v in s:
...     d[k].append(v)
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> d
defaultdict(<type 'list'>, {'blue': [2, 4], 'red': [1], 'yellow': [1, 3]})

77 hữu ích 0 bình luận chia sẻ