Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

OrderedDict trong Python

OrderedDict là một lớp con (subclass) của đối tượng dict trong Python. Sự khác biệt duy nhất giữa OrderedDict và dict là: OrderedDict duy trì thứ tự các khóa (keys) theo thứ tự chèn vào. Còn dict thông thường, thứ tự có thể xảy ra hoặc không.

OrderedDict là một lớp thư viện chuẩn, nằm trong module collections.

Để sử dụng, trước tiên cần nhập module collections:

import collections

Phần này sẽ trình bày một số thao tác trên OrderedDict và sự khác biệt giữa OrderedDict và Dict.

Chúng ta có thể đưa các khóa và giá trị vào Dict và OrderedDict. Trong ví dụ này ta thấy thứ tự của Dict có thể thay đổi. Nhưng với OrderedDict, thứ tự được cố định.

Mã ví dụ

import collections

# Tạo dict thông thường
my_dict = {}
my_dict['AA'] = 11
my_dict['BB'] = 22
my_dict['CC'] = 33
my_dict['DD'] = 44
for item in my_dict.items():
    print(item)
print()

# Tạo ordered dict
my_ord_dict = collections.OrderedDict()
my_ord_dict['AA'] = 11
my_ord_dict['BB'] = 22
my_ord_dict['CC'] = 33
my_ord_dict['DD'] = 44
for item in my_ord_dict.items():
    print(item)

Kết quả

('AA', 11)
('CC', 33)
('BB', 22)
('DD', 44)

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)

Thay đổi giá trị của khóa chỉ định

Khi giá trị của một khóa được thay đổi, thứ tự các khóa sẽ không thay đổi đối với OrderedDict. Ta thấy câu này có thể đúng hoặc không đối với đối tượng kiểu Dict.

Mã ví dụ

import collections

# Tạo dict thông thường
my_dict = {}
my_dict['AA'] = 11
my_dict['BB'] = 22
my_dict['CC'] = 33
my_dict['DD'] = 44
for item in my_dict.items():
    print(item)

# Thay đổi giá trị cho khóa BB
my_dict['BB'] = 100
print('Sau khi thay đổi trong Dict')
for item in my_dict.items():
    print(item)
print()

# Tạo ordered dict
my_ord_dict = collections.OrderedDict()
my_ord_dict['AA'] = 11
my_ord_dict['BB'] = 22
my_ord_dict['CC'] = 33
my_ord_dict['DD'] = 44
for item in my_ord_dict.items():
    print(item)

# Thay đổi giá trị cho khóa BB
my_ord_dict['BB'] = 100
print('Sau khi thay đổi trong Ordered Dict')
for item in my_ord_dict.items():
    print(item)

Kết quả

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)
Sau khi thay đổi trong Dict
('AA', 11)
('CC', 33)
('DD', 44)
('BB', 100)

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)
Sau khi thay đổi trong Ordered Dict
('AA', 11)
('BB', 100)
('CC', 33)
('DD', 44)

Xóa và chèn lại phần tử trong OrderedDict

Khi một phần tử bị xóa khỏi OrderedDict và thực hiện chèn lại (re-insert) khóa và giá trị đó, nó sẽ được đẩy xuống cuối. Mặc dù nó duy trì thứ tự khi chèn, nhưng khi xóa, nó loại bỏ thông tin thứ tự và coi như mục mới khi chèn lại.

Mã ví dụ

import collections

# Tạo ordered dict
my_ord_dict = collections.OrderedDict()
my_ord_dict['AA'] = 11
my_ord_dict['BB'] = 22
my_ord_dict['CC'] = 33
my_ord_dict['DD'] = 44
for item in my_ord_dict.items():
    print(item)

# Xóa mục tại khóa BB
my_ord_dict.pop('BB')
print('Sau khi xóa')
for item in my_ord_dict.items():
    print(item)

# Chèn lại mục
my_ord_dict['BB'] = 22
print('Sau khi chèn lại')
for item in my_ord_dict.items():
    print(item)

Kết quả

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)
Sau khi xóa
('AA', 11)
('CC', 33)
('DD', 44)
Sau khi chèn lại
('AA', 11)
('CC', 33)
('DD', 44)
('BB', 22)