python高级容器collections -- OrderedDict

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']
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值