当前位置: 首页 > 工具软件 > Collections-C > 使用案例 >

python高级容器collections -- OrderedDict

陆弘光
2023-12-01

collections模块实现了特定目标的容器,以提供Python标准内建容器 dict , list , set , 和 tuple 的替代选择。

包含namedtupledequeChainMapCounterOrderedDictdefaultdict等。

本章讲解OrderedDict,基于python3.10。

介绍

class collections.OrderedDict([items])

OrderedDictdict 子类的实例,有序词典就像常规词典一样,但有一些与排序操作相关的额外功能。

值得一提的是,python3.7后,内置的 dict 类获得了记住插入顺序的能力,所以这个容器不那么重要了。

一些与dict 的不同:

  1. 常规的 dict 被设计为非常擅长映射操作。跟踪插入顺序是次要的;
  2. OrderedDict 旨在擅长重新排序操作。空间效率、迭代速度和更新操作的性能是次要的;
  3. 算法上, OrderedDict 可以比 dict 更好地处理频繁的重新排序操作。这使其适用于跟踪最近的访问(例如在 LRU cache 中);

常用方法与常规dict比较

传统字典方法OrderedDict方法差异
clearclear
copycopy
fromkeysfromkeys
getget
itemsitems
keyskeys
poppop
popitempopitemOrderedDict 类的 popitem() 方法有不同的签名。它接受一个可选参数来指定弹出哪个元素。
setdefaultsetdefault
updateupdate
valuesvalues
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']
 类似资料: