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方法 差异
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']
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐