Python 學習 第十四篇:命名元組

Python的元組不能爲元組內部的數據進行命名,而 collections.namedtuple 能夠來構造一個含有字段名稱的元組類,命名元組能夠經過逗號+字段名來獲取元素值:sql

collections.namedtuple(typename, field_names)

返回一個命名元組類 typename,其中參數的意義以下:函數

  • typename:類名稱
  • field_names: 元組中元素的名稱

一,定義命名元組類

命名元組是一個類,有兩種方式來定義命名元組: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

  • 類屬性 _fields:包含這個類全部字段名的元組
  • 類方法 _make(iterable):接受一個可迭代對象來生產這個類的實例
# 經過類方法 _make() 和一個list建立一個User對象
user = User._make(['Runoob', 'male', 12])
User._fields

2,命名元組實例的方法sqlite

  • 實例方法 _asdict():把具名元組以 collections.OrdereDict 的形式返回,能夠利用它來把元組裏的信息友好的展現出來
  • 實例方法_replace():用於修改實例的屬性
# 獲取實例的屬性:
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)

 

 

參考文檔:

Python namedtuple

namedtuple工廠函數精講

相關文章
相關標籤/搜索