Python数据结构与算法---OrderedDict
Posted 一天一篇Python库
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据结构与算法---OrderedDict相关的知识,希望对你有一定的参考价值。
前言
既然上一篇博文学习了namedtuple转换为OrderedDict。那么本篇博文就直接讲解OrderedDict数据结构的用法。
初始OrderedDict
OrderedDict顾名思义也是一个字典,不过它是字典的子类。相对于普通的字典,它可以记住其内容增加的顺序。
我们来看看普通字典的创建于OrderedDict字典的创建方式对比:
import collections
print("普通Dict:")
a = {}
a['a'] = 'A'
a['b'] = 'B'
a['c'] = 'C'
for key, value in a.items():
print(key, value)
print("OrderedDict:")
b = collections.OrderedDict()
b['a'] = 'A'
b['b'] = 'B'
b['c'] = 'C'
for key, value in b.items():
print(key, value)
运行之后,效果如下:
可以看到,普通字典与OrderedDict无非就是构造函数不一样,其他的遍历赋值等几乎都是一摸一样的。那么,OrderedDict字典存在的意义又是什么呢?
相等性
其实,我们开头说了,OrderedDict字典能够记住内容被增加的顺序。这里,我们来做一个有趣的实验,假设有2个普通的字典与2个OrderedDict字典,创建其字典是,仅仅只是赋值顺序不同,我们来看看效果:
import collections
print("普通Dict:")
a = {}
a['a'] = 'A'
a['b'] = 'B'
a['c'] = 'C'
b = {}
b['c'] = 'C'
b['b'] = 'B'
b['a'] = 'A'
print("是否相等:", a == b)
print("OrderedDict:")
c = collections.OrderedDict()
c['a'] = 'A'
c['b'] = 'B'
c['c'] = 'C'
d = collections.OrderedDict()
d['c'] = 'C'
d['b'] = 'B'
d['a'] = 'A'
print("是否相等:", c == d)
运行之后,效果如下:
可以看到,普通字典只要内容相同,不管其添加顺序如何,都能相等。而OrderedDict字典哪怕内容相同,只要顺序不同,都判断为不相等。因为OrderedDict字典检查其相等性时,会查看器内容的增加顺序,普通字典则不会。
move_to_end()
在普通的字典中,如果想移动某个元素到开头或者末尾,往往我们需要借助lambda表达式进行操作。而OrderedDict字典提供了函数move_to_end()可以很方便的将元素移动到开头或者结尾,具体操作如下:
import collections
c = collections.OrderedDict()
c['a'] = 'A'
c['b'] = 'B'
c['c'] = 'C'
print("最初字典顺序")
for key, value in c.items():
print(key, value)
print('指定元素移动到末尾')
c.move_to_end('b')
for key, value in c.items():
print(key, value)
print('指定元素移动到开头')
c.move_to_end('b', last=False)
for key, value in c.items():
print(key, value)
运行之后,效果如下:
可以看到当move_to_end第2个参数为True时,默认移动到末尾;当move_to_end第2个参数为False时,默认移动到开头。
以上是关于Python数据结构与算法---OrderedDict的主要内容,如果未能解决你的问题,请参考以下文章