collections模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。
包含namedtuple
、deque
、ChainMap
、Counter
、OrderedDict
、defaultdict
等。
本章讲解OrderedDict
,基于python3.10。
class collections.OrderedDict([items])
OrderedDict
是 dict
子类的实例,有序词典就像常规词典一样,但有一些与排序操作相关的额外功能。
值得一提的是,python3.7后,内置的 dict 类获得了记住插入顺序的能力,所以这个容器不那么重要了。
一些与dict 的不同:
传统字典方法 | OrderedDict方法 | 差异 |
---|---|---|
clear | clear | |
copy | copy | |
fromkeys | fromkeys | |
get | get | |
items | items | |
keys | keys | |
pop | pop | |
popitem | popitem | OrderedDict 类的 popitem() 方法有不同的签名。它接受一个可选参数来指定弹出哪个元素。 |
setdefault | setdefault | |
update | update | |
values | values | |
move_to_end | 可以有效地将元素移动到任一端。 |
1、popitem
语法:popitem(last=True)
功能:有序字典的 popitem() 方法移除并返回一个 (key, value) 键值对。如果 last 值为真,则按 LIFO 后进先出的顺序返回键值对,否则就按 FIFO 先进先出的顺序返回键值对。
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
print(d) # OrderedDict([('p', None), ('r', None), ('i', None), ('n', None), ('t', None), ('(', None), ('d', None), (')', None)])
print(d.popitem(d)) # ('e', None)
print(d) # OrderedDict([('a', None), ('b', None), ('c', None), ('d', None)])
print(d.keys()) # odict_keys(['a', 'b', 'c', 'd'])
#last=False时,弹出第一个
d.popitem(last=False)
print(d) # OrderedDict([('b', None), ('c', None), ('d', None)])
2、move_to_end
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
d.move_to_end('b')
print(d) # OrderedDict([('a', None), ('c', None), ('d', None), ('e', None), ('b', None)])
d.move_to_end('b', last=False)
print(d) # OrderedDict([('b', None), ('a', None), ('c', None), ('d', None), ('e', None)])
3、reversed()
相对于通常的映射方法,有序字典还另外提供了逆序迭代的支持,通过reversed() 。
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
print(list(reversed(d))) # ['e', 'd', 'c', 'b', 'a']