Python3 带字段名的元组namedtuple

本文深入探讨了Python中NamedTuple的使用,解释了其如何解决普通元组无法命名元素的问题,通过实例展示了NamedTuple的创建和操作,包括_make和_replace方法的使用,以及如何将NamedTuple转换为字典。

存在的意义

因为元组的局限性:不能为元组内部的数据进行命名,所以往往不知道该数据表达的意思
所以引入了namedtuple工厂函数,来构造一个带字段名的元组。其实例和普通的元组消耗的内存一样多,

参数说明

继承tuple的子类
namedtuple(typename, field_names=*, verboss=False, rename=False, module=None)
	- typename: 元组名称
	- field_names: 元组中元素的名称
	- rename: 如果元素中存在Python关键字,必须设置 rename=True

示例

from collections import namedtuple

User = namedtuple('User', ['name', 'age', 'gender'])

u = User('Tom', 18, 'male')
print(u.name, u.age, u.gender)

# 通过一个list来创建User对象,需使用“_make”方法
user = User._make(['JAM', 20, 'MALE'])
print(user.name, user.age, user.gender)

# 修改对象属性
user = user._replace(age=21)
print(user)

# 将对象转为字典

print(user._asdict())
### Python `collections.namedtuple` 使用教程 #### 创建具名元组 `namedtuple` 是 Python 内置库 `collections` 提供的一个工厂函数,用于创建字段名称的元组子类。这使得访问元素更加直观和易读。 ```python from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(11, y=22) print(p[0] + p[1]) # 输出: 33 print(p.x + p.y) # 输出: 33 ``` 上述代码展示了如何定义一个新的具名元组类型 `Point` 并实例化它[^1]。 #### 字段属性与方法 具名元组不仅支持索引访问,还允许通过字段名来获取值: ```python EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title') emp = EmployeeRecord('Alice', 30, 'Engineer') print(emp.name) # 输出: Alice print(emp.age) # 输出: 30 print(emp.title) # 输出: Engineer ``` 此外,具名元组提供了 `_asdict()` 方法返回有序字典表示形式以及 `_replace()` 来创建新版本的对象[^5]。 #### 替换部分字段 如果想要改变某个特定字段而不影响其他字段,则可以使用 `_replace()` 方法: ```python coordinate = namedtuple('Coordinate', ['x', 'y']) co = coordinate(10, 20) new_co = co._replace(x=30) print(co.x, co.y) # 输出: 10 20 print(new_co.x, new_co.y) # 输出: 30 20 ``` 此功能对于构建不可变对象非常有用,因为可以直接生成具有不同特性的副本而无需重新初始化整个对象[^4]。 #### 列表转换为具名元组 有时候会遇到从列表或其他可迭代序列中快速构造具名元组的需求,这时可以用到 `_make()` 类方法: ```python data = [100, 200] coordinate = namedtuple('Coordinate', ['x', 'y']) co = coordinate._make(data) print(co.x, co.y) # 输出: 100 200 ``` 这种方法简化了批量赋值的过程,提高了编码效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值