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

Mô-đun bộ sưu tập của Python có một lớp con tuyệt vời khác của dict được gọi là OrderedDict. Như tên của nó, từ điển này theo dõi thứ tự của các phím khi chúng được thêm vào. Nếu bạn tạo một lệnh chính quy, bạn sẽ lưu ý rằng đó là một bộ sưu tập dữ liệu không có thứ tự:

>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> d
{'apple': 4, 'banana': 3, 'orange': 2, 'pear': 1}

Mỗi khi bạn in nó ra, thứ tự có thể khác nhau. Đôi khi bạn sẽ cần phải lặp lại các khóa trong từ điển của mình theo một thứ tự cụ thể. Ví dụ, tôi đã có một trường hợp sử dụng khi tôi cần các khóa được sắp xếp để tôi có thể lặp qua chúng theo thứ tự. Để làm điều đó, bạn có thể làm như sau:

>>> keys = d.keys()
>>> keys
dict_keys(['apple', 'orange', 'banana', 'pear'])
>>> keys = sorted(keys)
['apple', 'banana', 'orange', 'pear']
>>> for key in keys:
...     print (key, d[key])
... 
apple 4
banana 3
orange 2
pear 1

Chúng ta hãy tạo một thể hiện của OrderedDict bằng cách sử dụng chính tả ban đầu của chúng tôi, nhưng trong quá trình tạo, chúng tôi sẽ sắp xếp các khóa của từ điển:

>>> from collections import OrderedDict
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
>>> new_d = OrderedDict(sorted(d.items()))
>>> new_d
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
>>> for key in new_d:
...     print (key, new_d[key])
... 
apple 4
banana 3
orange 2
pear 1

Ở đây, chúng ta tạo OrderedDict bằng cách sắp xếp nó một cách nhanh chóng bằng hàm dựng sẵn được sắp xếp của Python . Hàm được sắp xếp có trong các mục của từ điển, đó là danh sách các bộ dữ liệu đại diện cho các cặp khóa của từ điển. Nó sắp xếp chúng và sau đó chuyển chúng vào OrderedDict, thứ sẽ giữ trật tự của chúng. Vì vậy, khi chúng ta đi in ra các khóa và giá trị, chúng theo thứ tự chúng ta mong đợi. Nếu bạn lặp qua một từ điển thông thường (không phải là danh sách các khóa được sắp xếp), thứ tự sẽ thay đổi mọi lúc.

Lưu ý rằng nếu bạn thêm khóa mới, chúng sẽ được thêm vào cuối OrderedDict thay vì được tự động sắp xếp.

Một điều khác cần lưu ý về OrderDicts là khi bạn đi so sánh hai OrderedDicts, họ sẽ không chỉ kiểm tra các mục cho sự bình đẳng mà còn là thứ tự đúng. Một từ điển thông thường chỉ nhìn vào nội dung của từ điển và không quan tâm đến thứ tự của nó.

Cuối cùng, OrderDicts có hai phương thức mới trong Python 3: popitemmove_to_end . Phương thức popitem sẽ trả về và xóa một cặp (khóa, vật phẩm). Phương thức move_to_end sẽ di chuyển một khóa hiện có đến một trong hai đầu của OrderedDict. Mục này sẽ được chuyển sang phải đến cuối nếu đối số cuối cùng cho OrderedDict được đặt thành True (là mặc định) hoặc bắt đầu nếu nó là Sai.

Thật thú vị, OrderedDicts hỗ trợ phép lặp ngược bằng cách sử dụng hàm tích hợp đảo ngược của Python:

>>> for key in reversed(new_d):
...     print (key, new_d[key])
... 
pear 1
orange 2
banana 3
apple 4

Khá gọn gàng, mặc dù bạn có thể sẽ không cần chức năng đó mỗi ngày.

Kết thúc

Tại thời điểm này, bạn nên sẵn sàng dùng thử OrderedDict cho chính mình. Đó là một bổ sung hữu ích cho bộ công cụ của bạn mà tôi hy vọng bạn sẽ tìm thấy nhiều cách sử dụng trong cơ sở mã của mình.

Đọc liên quan

  • Tài liệu chính thức   cho OrderedDict
  • Mô-đun Python trong tuần:  OrderedDict

4 hữu ích 0 bình luận 9.7k xem chia sẻ



Module collection trong Python được định nghĩa là một bộ chứa được sử dụng để lưu trữ các bộ sưu tập dữ liệu, ví dụ: list, dict, set và tuple,... Nó được giới thiệu để cải thiện các chức năng của bộ chứa bộ sưu tập tích hợp.

Module collection trong Python được giới thiệu lần đầu tiên trong phiên bản 2.4.

Có nhiều loại Module collection khác nhau như sau:

Hàm namedtuple()

Hàm python namedtuple() trả về một đối tượng giống như tuple với tên cho từng vị trí trong bộ dữ liệu. Nó được sử dụng để loại bỏ vấn đề ghi nhớ chỉ số của từng trường của một đối tượng bộ dữ liệu trong các bộ dữ liệu thông thường.

test = ('Hello', 24, 'M')  
print(test)  

Kết quả:

Hàm OrderedDict()

Python OrderedDict() tương tự như một đối tượng Dictionary trong đó các khóa duy trì thứ tự chèn. Nếu chúng ta cố gắng chèn khóa một lần nữa, giá trị trước đó sẽ bị ghi đè cho khóa đó.

import collections  
d1 = collections.OrderedDict()  
d1['A'] = 10  
d1['C'] = 12  
d1['B'] = 11  
d1['D'] = 13  
d1['C'] = 15  
  
for k, v in d1.items():  
    print (k, v) 

Kết quả:

Hàm defaultdict()

Python defaultdict() được định nghĩa là một đối tượng giống như dictionary. Nó là một lớp con của lớp dict. Nó cung cấp tất cả các phương thức được cung cấp bởi dictionary nhưng lấy đối số đầu tiên làm kiểu dữ liệu mặc định.

from collections import defaultdict
number = defaultdict(int)
number['one'] = 1
number['two'] = 2
print(number['three'])

Kết quả:

Hàm Counter()

Python Count() là một lớp con của đối tượng từ điển giúp đếm các đối tượng hashtable.

from collections import Counter
c = Counter()
list = [1, 2, 3, 4, 5, 7, 8, 5, 9, 6, 10]
Counter(list)
Counter({1:5, 2:4})
list = [1, 2, 4, 7, 5, 1, 6, 7, 6, 9, 1]
c = Counter(list)
print(c[1])

Kết quả:

Hàm deque()

Python deque() là hàng đợi hai đầu cho phép chúng ta thêm và xóa các phần tử ở cả hai đầu.

from collections import deque
list = ["x", "y", "z"]
deq = deque(list)
print(deq)

Kết quả: