_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()
方法移除并返回一个 (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}
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 信号量 C# 多线程访问之 SemaphoreSlim【C# 进阶】
- 炉石传说新手攻略萌新到底怎么玩(炉石传说新手进阶流程)
- 38 全球名校AI课程库| 马萨诸塞大学 · 自然语言处理进阶课程『Advanced Natural Language Processing』
- Python基础指面向对象:2、动静态方法
- Python基础之面向对象:3、继承与派生
- ysoserial CommonsCollections2 分析
- 如何免安装使用 Python?推荐 17 个在线的 Python 解释器!
- Python处理刚刚,分钟,小时,天前等时间
- python渗透测试入门——取代netcat
- 六 Selenium4+Python3系列 - Selenium的三种等待,强制等待、隐式等待、显式等待