26 python进阶collections标准库( 二 )

_replace(**kwargs) 返回一个新的命名元组实例,并将指定域替换为新的值
>>> user5 = User(name='jkc5', age=30, height=210)>>> user5._replace(age=18)User(name='jkc5', age=30, height=210)_fields 字符串元组列出了字段名 。用于提醒和从现有元组创建一个新的命名元组类型
>>> user5._fields('name', 'age', 'height')_field_defaults 字典将字段名称映射到默认值 。
>>> User._field_defaults{'name': 'jkc', 'age': 18, 'height': 180}转换一个字典到命名元组,使用 ** 两星操作符
>>> d = {'name': 'jkc6', 'age': 18, 'height': 180}>>> User(**d)User(name='jkc6', age=18, height=180)OrderedDict有序字典就像常规字典一样,但有一些与排序操作相关的额外功能 。由于内置的 dict 类获得了记住插入顺序的能力(在 Python 3.7 中保证了这种新行为),它们变得不那么重要了 。
与dict类的区别

  • 常规的 dict 被设计为非常擅长映射操作 。跟踪插入顺序是次要的
  • OrderedDict 擅长重新排序操作 。空间效率、迭代速度和更新操作的性能是次要的 。
  • 算法上,OrderedDict 可以比 dict 更好地处理频繁的重新排序操作 。这使其适用于跟踪最近的访问(例如在 LRU cache 中) 。
  • 对于 OrderedDict,相等操作检查匹配顺序 。
  • OrderedDict 类的 popitem() 方法有不同的签名 。它接受一个可选参数来指定弹出哪个元素 。
  • OrderedDict 类有一个 move_to_end() 方法,可以有效地将元素移动到任一端 。
  • Python 3.8之前,dict 缺少 __reversed__() 方法 。
popitem(last=True)有序字典的 popitem() 方法移除并返回一个 (key, value) 键值对 。如果 last 值为真,则按 LIFO 后进先出的顺序返回键值对,否则就按 FIFO 先进先出的顺序返回键值对 。
from collections import OrderedDictd = OrderedDict({'status': 200, 'message': 'success'})print(f'原始的有序字典: {d}')print('被删除的键值对是: ', d.popitem(last=True))# 后进先出print(f'被删除后的有序字典: {d}')# 结果原始的有序字典: OrderedDict([('status', 200), ('message', 'success')])被删除的键值对是:('message', 'success')被删除后的有序字典: OrderedDict([('status', 200)])from collections import OrderedDictd = OrderedDict({'status': 200, 'message': 'success'})print(f'原始的有序字典: {d}')print('被删除的键值对是: ', d.popitem(last=False))# 先进先出print(f'被删除后的有序字典: {d}')# 结果原始的有序字典: OrderedDict([('status', 200), ('message', 'success')])被删除的键值对是:('status', 200)被删除后的有序字典: OrderedDict([('message', 'success')])move_to_end(key, last=True)将现有 key 移动到有序字典的任一端 。如果 last 为真值(默认)则将元素移至末尾;如果 last 为假值则将元素移至开头 。如果 key 不存在则会触发 KeyError:
d = OrderedDict({'status': 200, 'message': 'success'})d.move_to_end('status', last=True)print('移动后的字典: ', d)d.move_to_end('status', last=False)print('移动后的字典', d)# 结果移动后的字典:OrderedDict([('message', 'success'), ('status', 200)])移动后的字典:OrderedDict([('status', 200), ('message', 'success')])支持reversed相对于通常的映射方法,有序字典还另外提供了逆序迭代的支持,通过 reversed()
d = OrderedDict({'status': 200, 'message': 'success'})print({key: value for key, value in reversed(d.items())})# 结果{'message': 'success', 'status': 200}

经验总结扩展阅读