Python的元組不能爲元組內部的數據進行命名,而 collections.namedtuple 能夠來構造一個含有字段名稱的元組類,命名元組能夠經過逗號+字段名來獲取元素值:sql
collections.namedtuple(typename, field_names)
返回一個命名元組類 typename,其中參數的意義以下:函數
命名元組是一個類,有兩種方式來定義命名元組:fetch
from collections import namedtuple User = namedtuple('User', ['name', 'age', 'id']) User = namedtuple('User', 'name age id')
實例化命名元組,得到類的一個實例:spa
user = User('tester', '22', '464643123')
1,命名元組類的屬性和方法code
# 經過類方法 _make() 和一個list建立一個User對象 user = User._make(['Runoob', 'male', 12]) User._fields
2,命名元組實例的方法sqlite
# 獲取實例的屬性: 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)])
1,把字典轉換爲命名元組對象
能夠把Python的字典轉換爲命名元組:blog
>>> dt={'name':'b', 'age':2, 'id':135} >>> ut=User(**dt) ## User(name='b', age=2, id=135)
2,把列表轉換爲命名元組文檔
使用map函數,調用命名元組類的_make函數,把列表轉換爲命名元組的列表get
User = namedtuple('User', 'name age id') list_users=map(User._make,[('u1',23,1001),('u2',21,1002),('u3',25,1003),])
3,把命名元組轉換爲列表
也能夠把命名元組轉換爲list,列表中只有值,而沒有字段名稱:
>>> list(ut) ['b', '2', 135]
經過逗號運算符和屬性名來訪問元組字段的值,例如,ut是命名元組的對象,name是對象的屬性,能夠經過如下方式訪問元組的name屬性:
ut.name
命名元組在存儲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)
參考文檔: