namedtuple描述
Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型。相比与list,tuple中的元素不可修改,在映射中可以当键使用。tuple元组的item只能通过index访问,collections模块的namedtuple子类不仅可以使用item的index访问item,还可以通过item的name进行访问。
其首先将各个item命名,然后对每个item赋予数据。
from collections import namedtuple # 使用时先导包# 初始化需要两个参数,第一个是 name,第二个参数是所有 item 名字的列表。coordinate = namedtuple('Coordinate', ['x', 'y'])# 如果你无法理解这样的穿件方式,就先把这句话当成创建了一个继承自namedtuple类的子类,# 第一个参数是且必须是类名,第二个参数是该类的实例属性的列表User = namedtuple('User', ['name', 'age', 'home']) #类名User 参数有[name,age,home]u = User('it', 33, 'beijing')#创建实例对象,并传入对应参数的值print(u.name) # 通过实例对象名.属性名的方式进行访问print(u.age)print(u)u = u._replace(age=100) # _replace()方法可以更改属性值print(u.age)
it# 输出结果33User(name='it', age=33, home='beijing')100
namedtuple 还提供了 _make 从 iterable 对象中创建新的实例:
coordinate._make([10,20]) # 这种方法创建和上述的方法二选一使用
namedtuple还提供了_replace方法可以为一个对象的item重新赋值
coordinate._replace(x=30) # 重要
namedtuple还提供了_asdict方法可以将命名元组转换为对应键值字典
print(u._asdict())# OrderedDict([('name', 'it'), ('age', 100), ('home', 'beijing')])# 因为元组是有序的,所以直接转成了OrderedDict
d = u._asdict()print(d)for i in d:print(i, d.get(i)) # 以后从字典取值的时候用get(),别再用[]了# 结果# OrderedDict([('name', 'it'), ('age', 100), ('home', 'beijing')])# name it# age 100# home beijing
如果觉得《collections模块之namedtuple》对你有帮助,请点赞、收藏,并留下你的观点哦!