Python的元组不能为元组内部的数据进行命名,而 collections.namedtuple 可以来构造一个含有字段名称的元组类,命名元组可以通过字段名来获取元素值:
collections.namedtuple(typename, field_names)
返回一个命名元组类 typename,其中参数的意义如下:
命名元组是一个类,有两种方式来定义命名元组:
from collections import namedtuple User = namedtuple(‘User‘, [‘name‘, ‘age‘, ‘id‘]) User = namedtuple(‘User‘, ‘name age id‘)
实例化命名元组,获得类的一个实例:
user = User(‘tester‘, ‘22‘, ‘464643123‘)
1,命名元组类的属性和方法
# 通过类方法 _make() 和一个list创建一个User对象 user = User._make([‘Runoob‘, ‘male‘, 12]) User._fields
2,命名元组实例的方法
# 获取实例的属性: print( user.name, user.sex, user.age) # 使用 _replace() 修改对象属性 user = user._replace(age=22)# User(name=‘user1‘, sex=‘male‘, age=22) # 使用 _asdict()函数把 User对象转换成字典 print( user._asdict() ) # OrderedDict([(‘name‘, ‘Runoob‘), (‘sex‘, ‘male‘), (‘age‘, 22)])
3,把字典转换为命名元组
可以把Python的字典转换为命名元组
>>> dt={‘name‘:‘b‘, ‘age‘:2, ‘id‘:135} >>> ut=User(**dt) ## User(name=‘b‘, age=2, id=135)
命名元组在存储csv
或者sqlite3
返回数据的时候特别有用
EmployeeRecord = namedtuple(‘EmployeeRecord‘, ‘name, age, title, department, paygrade‘) import csv for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))): print(emp.name, emp.title) import sqlite3 conn = sqlite3.connect(‘/companydata‘) cursor = conn.cursor() cursor.execute(‘SELECT name, age, title, department, paygrade FROM employees‘) for emp in map(EmployeeRecord._make, cursor.fetchall()): print(emp.name, emp.title)
参考文档:
原文:https://www.cnblogs.com/ljhdo/p/10656314.html