第二章:数据结构-collections:容器数据类型-OrderedDict:记住向字典中增加键的顺序

2.2.6 OrderedDict:记住向字典中增加键的顺序

OrderedDict是一个字典子类,可以记住其内容增加的顺序。

import collections

print('Regular dictionary:')

d = {}
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'

for k,v in d.items():
    print(k,v)

print('\nOrderedDict:')
d = collections.OrderedDict()
d['a'] = 'A'
d['b'] = 'B'
d['c'] = 'C'

for k,v in d.items():
    print(k,v)

常规dict并不跟踪插入顺序,迭代处理时会根据散列表中如何存储键来按顺序生成值,而散列表中键的存储会受一个随机值的影响,以减少冲突。OrderedDict中则相反,它会记住元素插入的顺序,并在创建迭代器时使用这个顺序。
运行结果:

Regular dictionary:
a A
b B
c C

OrderedDict:
a A
b B
c C

2.2.6.1 相等性
常规的dict在检查相等性时会查看其内容。OrderedDict还会考虑元素增加的顺序。

import collections

print('dict       :',end=' ')
d1 = {}
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'

d2 = {}
d2['c'] = 'C'
d2['b'] = 'B'
d2['a'] = 'A'

print(d1 == d2)

print('OrderedDict:',end=' ')

d1 = collections.OrderedDict()
d1['a'] = 'A'
d1['b'] = 'B'
d1['c'] = 'C'

d2 = collections.OrderedDict()
d2['c'] = 'C'
d2['b'] = 'B'
d2['a'] = 'A'

print(d1 == d2)

在这个例子中,由于两个有序字典由不同顺序的值创建,所有认为这两个有序字典是不同的。
运行结果:

dict : True
OrderedDict: False

2.2.6.2 重排
在OrderedDict中可以使用move_to_end()将键移至序列的起始或末尾位置来改变键的顺序。

import collections

d = collections.OrderedDict(
    [('a','A'),('b','B'),('c','C')]
    )

print('Before:')
for k,v in d.items():
    print(k,v)

d.move_to_end('b')

print('\nmove_to_end():')
for k,v in d.items():
    print(k,v)

d.move_to_end('b',last=False)

print('\nmove_to_end(last=False):')
for k,v in d.items():
    print(k,v)

last参数会告诉move_to_end()要把元素移动为键序列的最后一个元素(参数值为True)或者第一个元素(参数值为False)。
运行结果:

Before:
a A
b B
c C

move_to_end():
a A
c C
b B

move_to_end(last=False):
b B
a A
c C

你可能感兴趣的:(Python标准库)