Hướng dẫn ordereddict trong python



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ả:



Python OrderedDict is a dict subclass that maintains the items insertion order. When we iterate over an OrderedDict, items are returned in the order they were inserted. A regular dictionary doesn’t track the insertion order. So when iterating over it, items are returned in an arbitrary order. When we want to make sure that items are returned in the order they were inserted, we can use OrderedDict.

Nội dung chính

  • Python OrderedDict
  • Python OrderedDict Examples
  • Creating OrderedDict object
  • Adding, Replacing, Removing items from OrderedDict
  • OrderedDict move_to_end example
  • OrderedDict popitem example
  • OrderedDict Reverse Iteration
  • OrderedDict Equality Tests Example
  • Kết thúc
  • Đọc liên quan

Python OrderedDict

  • OrderedDict is part of python collections module.
  • We can create an empty OrderedDict and add items to it. If we create an OrderedDict by passing a dict argument, then the ordering may be lost because dict doesn’t maintain the insertion order.
  • If an item is overwritten in the OrderedDict, it’s position is maintained.
  • If an item is deleted and added again, then it moves to the last.
  • OrderedDict popitem removes the items in FIFO order. It accepts a boolean argument last, if it’s set to True then items are returned in LIFO order.
  • We can move an item to the beginning or end of the OrderedDict using move_to_end function. It accepts a boolean argument last, if it’s set to False then item is moved to the start of the ordered dict.
  • From python 3.6 onwards, order is retained for keyword arguments passed to the OrderedDict constructor, refer PEP-468.
  • We can use reversed() function with OrderedDict to iterate elements in the reverse order.
  • Equality tests between OrderedDict objects are order-sensitive and are implemented as list(od1.items())==list(od2.items()).
  • Equality tests between OrderedDict and other Mapping objects are order-insensitive like regular dictionaries. This allows OrderedDict objects to be substituted anywhere a regular dictionary is used.

Python OrderedDict Examples

Let’s look at some code examples of Python OrderedDict.

Creating OrderedDict object

from collections import OrderedDict

# creating a simple dict
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# creating empty ordered dict
ordered_dict = OrderedDict()
print(ordered_dict)

# creating ordered dict from dict
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)

Output:

OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])

Adding, Replacing, Removing items from OrderedDict

# adding elements to dict
ordered_dict['dog'] = 3

# replacing a dict key value
ordered_dict['kiwi'] = 10
print(ordered_dict)

# removing and adding a value
ordered_dict.pop('kiwi')
print(ordered_dict)
ordered_dict['kiwi'] = 4
print(ordered_dict)

Output:

OrderedDict([('kiwi', 10), ('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3), ('kiwi', 4)])

OrderedDict move_to_end example

# moving apple to end and dog to start
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)

Output:

OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4), ('apple', 5)])

OrderedDict popitem example

# pop last item
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

Output:

('apple', 5)
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4)])

OrderedDict Reverse Iteration

# reversed iteration
for item in reversed(ordered_dict):
    print(item)

Output:

kiwi
cat
dog

OrderedDict Equality Tests Example

# equality tests
d1 = {'a': 'A', 'b': 'B'}
d2 = {'b': 'B', 'a': 'A'}

od1 = OrderedDict({'a': 'A', 'b': 'B'})
od2 = OrderedDict({'b': 'B', 'a': 'A'})

print(d1 == d2)
print(od1 == od2)
print(d1 == od1)

Output:

True
False
True

You can download the complete example code from our GitHub Repository.

Reference: Python Docs

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ẻ