关于Python中namedtuple命名元组的使用,以下是完整攻略。
什么是namedtuple?
namedtuple是Python中collections模块下的一种数据类型,它是一种可命名的元组,即除了tuple元组所有的特性之外,还可以通过属性名来访问元素。namedtuple可以方便地定义一个记录类,相比于定义一个类,namedtuple更加简洁。
如何创建namedtuple对象?
需要先导入collections模块,然后使用collections.namedtuple()方法创建一个namedtuple对象。该方法需要传入两个参数:第一个参数是对象的名称,第二个参数是对象数据元组的各个字段名,作为一个用逗号分隔的字符串或者是作为一个可迭代的对象。
下面是一个示例:
import collections
Person = collections.namedtuple('Person', ['name', 'age', 'gender'])
如何使用namedtuple对象?
namedtuple对象可以像元组一样使用,也可以通过属性名来访问元素。
元组方式使用
p1 = Person('Tom', 25, 'man')
p2 = Person('Lucy', 23, 'woman')
print(p1[0], p1[1], p1[2]) # Tom 25 man
print(p2[0], p2[1], p2[2]) # Lucy 23 woman
属性名方式使用
p1 = Person('Tom', 25, 'man')
p2 = Person('Lucy', 23, 'woman')
print(p1.name, p1.age, p1.gender) # Tom 25 man
print(p2.name, p2.age, p2.gender) # Lucy 23 woman
namedtuple对象的属性和方法
namedtuple对象作为一个类,本质上具有类的属性和方法,这些属性和方法可以通过dir()函数查看。
_fields属性
_fields属性是namedtuple对象中存储字段名称的元组。
print(Person._fields) # ('name', 'age', 'gender')
_make()函数
_make()函数将一个可迭代对象转化为一个namedtuple对象。
p_list = ['Chris', 30, 'man']
p = Person._make(p_list)
print(p.name, p.age, p.gender) # Chris 30 man
_asdict()函数
_asdict()函数将一个namedtuple对象转化为一个有序字典。
p_dict = p._asdict()
print(p_dict) # OrderedDict([('name', 'Chris'), ('age', 30), ('gender', 'man')])
_replace()函数
_replace()函数返回一个新的namedtuple对象,其中指定的字段名被替换为指定的值。
p_new = p._replace(age=31)
print(p_new.name, p_new.age, p_new.gender) # Chris 31 man
示例
下面通过一个示例说明如何使用namedtuple,假设我们需要处理一个学生表格,其中每个学生有三个字段:姓名,年龄,以及一个列表存放该学生的课程成绩。
import collections
Student = collections.namedtuple('Student', ['name', 'age', 'grades'])
students = []
students.append(Student('Tom', 22, [90, 80, 70]))
students.append(Student('Lucy', 24, [85, 82, 98]))
students.append(Student('Jack', 21, [70, 75, 80]))
for student in students:
print(student.name, student.age, student.grades)
运行结果:
Tom 22 [90, 80, 70]
Lucy 24 [85, 82, 98]
Jack 21 [70, 75, 80]
从结果可以看出,通过使用namedtuple,我们可以方便地将学生的信息封装到一个对象中,并通过对象的属性名来访问相关信息。
另外,我们还可以使用namedtuple中的其他方法来方便地操作该对象,具体可以根据实际需求使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中namedtuple 命名元祖的使用 - Python技术站