Trong module collections có một số kiểu dữ liệu container (container datatypes), là các lựa chọn thay thế cho các container built-in (tích hợp sẵn) chung của Python như dict, list, set, v.v.
Một số container:
| STT | Container & Mô tả |
|---|---|
| 1 | namedtuple() – Tạo subclass tuple với trường tên (named fields) |
| 2 | deque – Hàng đợi dùng dữ liệu kiểu list |
| 3 | Counter – Subclass của dict để đếm đối tượng hash-table |
| 4 | ChainMap – Tạo view đơn nhất của nhiều mapping |
| 5 | OrderedDict – Subclass của dict, dữ liệu thêm theo thứ tự |
| 6 | UserList – Wrapper cho list để truy cập dễ dàng hơn |
Để dùng module này, nên nhập bằng:
import collections
Đối tượng Deque
Deque về cơ bản là sự khái quát hóa của stack và queue, khởi tạo từ trái sang phải. Dùng đối tượng list để tạo deque.
Một số phương thức liên quan đến Deque:
| STT | Phương thức & Mô tả |
|---|---|
| 1 | append(x) – Thêm x vào phía phải deque |
| 2 | appendleft(x) – Thêm x vào phía trái deque |
| 3 | clear() – Xóa deque |
| 4 | count(x) – Đếm số lần xuất hiện x trong deque |
| 5 | index(x[, start[,stop]]) – Trả về vị trí x. Nếu start/stop cho trước, tìm trong khoảng đó |
| 6 | insert(i, x) – Chèn x vào deque tại vị trí i |
| 7 | pop() – Xóa và trả về phần tử từ phía phải |
| 8 | popleft() – Xóa và trả về phần tử từ phía trái |
| 9 | reverse() – Đảo ngược nội dung deque |
| 10 | rotate(n=1) – Xoay deque n lần sang phải |
Mã ví dụ Deque
import collections as col
my_deque = col.deque('124dfre')
print(my_deque)
print("Phần tử Popped: " + str(my_deque.pop()))
print("Phần tử Popped từ trái: " + str(my_deque.popleft()))
print(my_deque)
Kết quả Deque
deque(['1', '2', '4', 'd', 'f', 'r', 'e']) Phần tử Popped: e Phần tử Popped từ trái: 1 deque(['2', '4', 'd', 'f', 'r'])
Đối tượng Counter
Counter là subclass của dict. Dùng để đếm giá trị khóa. Counter chỉ cho phép giá trị nguyên (integer).
Một số phương thức Counter:
| STT | Phương thức & Mô tả |
|---|---|
| 1 | elements() – Trả về các phần tử, lặp lại theo số lần counter giữ |
| 2 | most_common([n]) – Trả về list n phần tử phổ biến nhất. Nếu n không cho, trả về tất cả |
| 3 | subtract(iterable or mapping) – Trừ giá trị counter từ hai counter object, khớp khóa |
| 4 | update(iterable or mapping) – Cộng giá trị mà không thay thế, khớp khóa |
Mã ví dụ Counter
import collections as col
text_list = ['ABC','PQR','ABC','ABC','PQR','Mno','xyz','PQR','ABC','xyz']
my_counter = col.Counter()
for element in text_list:
my_counter[element] += 1
print(my_counter)
print(my_counter.most_common(2))
Kết quả Counter
Counter({'ABC': 4, 'PQR': 3, 'xyz': 2, 'Mno': 1})
[('ABC', 4), ('PQR', 3)]
Đối tượng ChainMap
ChainMap dùng để gom các dictionary thành đơn vị đơn nhất.
Một số thành viên ChainMap:
| STT | Phương thức & Mô tả |
|---|---|
| 1 | maps – Trả về khóa với giá trị tương ứng |
| 2 | new_child(m=None) – Chèn dictionary mới tại vị trí đầu tiên của chain |
Mã ví dụ ChainMap
import collections as col
con_code1 = {'India' : 'IN', 'China' : 'CN'}
con_code2 = {'France' : 'FR', 'United Kingdom' : 'GB'}
code = {'Japan' : 'JP'}
chain = col.ChainMap(con_code1, con_code2)
print("Chain ban đầu: " + str(chain.maps))
chain = chain.new_child(code) # Chèn New Child
print("Chain cuối cùng: " + str(chain.maps))
Kết quả ChainMap
Chain ban đầu: [{'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]
Chain cuối cùng: [{'Japan': 'JP'}, {'India': 'IN', 'China': 'CN'}, {'France': 'FR', 'United Kingdom': 'GB'}]