Python数据结构与算法---OrderedDict

Posted 李元静

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的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法(Python)

Python数据结构与算法专栏目录

Python数据结构与算法专栏目录

Python数据结构与算法——数据结构与算法导论

数据结构与算法(python版)教程

数据结构与算法入门-算法介绍(python版本)