Python 中的 OrderedDict


OrderedDict 是 Python 中 dict 对象的一个子类。OrderedDict 和 dict 之间的唯一区别在于,OrderedDict 按照键被插入的顺序来维护键的顺序。在 dict 中,顺序可能发生,也可能不发生。

OrderedDict 是一个标准库类,它位于 collections 模块中。

要使用它,我们首先需要导入 collections 标准库模块。

import collections

在本节中,我们将对 OrderedDict 以及 OrderedDict 和 Dict 之间的差异进行一些操作。

我们可以将一些键和值放入 Dict 和 OrderedDict 中。在此示例中,我们可以看到 Dict 的顺序可能有所不同。但对于 OrderedDict 来说,它将是固定的。

示例代码

import collections
#Create normal dict
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()
#Create 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)

输出

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

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

更改指定键的值

更改指定键的值时,OrderedDict 的键顺序不会改变。我们可以看到,对于 Dict 类型对象,该语句可能为真,也可能为假。

示例代码

import collections
#Create normal dict
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)
#Change the value for key BB
my_dict['BB'] = 100
print('After changing in Dict')
for item in my_dict.items():
   print(item)
print()
#Create 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)
#Change the value for key BB
my_ord_dict['BB'] = 100
print('After changing in Ordered Dict')
for item in my_ord_dict.items():
   print(item)

输出

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)
After changing in Dict
('AA', 11)
('CC', 33)
('DD', 44)
('BB', 100)

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)
After changing in Ordered Dict
('AA', 11)
('BB', 100)
('CC', 33)
('DD', 44)

从 OrderedDict 中删除元素并重新插入元素

从字典中删除某个元素,再对该键值执行重新插入操作时,将会将其移至末端。虽然插入时维持了顺序,但对于删除,它会移除排序信息,并将其视为重新插入的新条目。

示例代码

import collections
#Create 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)
#Delete item in key BB
my_ord_dict.pop('BB')
print('After Deleting')
for item in my_ord_dict.items():
   print(item)
#re-inserting item 
my_ord_dict['BB'] = 22
print('After Re-inserting')
for item in my_ord_dict.items():
   print(item)    

输出

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)
After Deleting
('AA', 11)
('CC', 33)
('DD', 44)
After Re-inserting
('AA', 11)
('CC', 33)
('DD', 44)
('BB', 22)

更新于:2019 年 7 月 30 日

3 千+ 次浏览

启动您的职业生涯

完成课程以获得认证

开始
广告