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)
广告