1. 程式人生 > >【collections模組】collections.namedtuple使用

【collections模組】collections.namedtuple使用

這裡namedtuple函式返回的是一個名為typename的tuple子類,這個子類可以通過field_names訪問子類的tuple成員,比tuple有更強大的功能。

1:tuple通過item的index訪問資料,或者通過index訪問其item

student=('math','chinese','english')
print(student[1])
print(student.index('math'))
chinese
0

2:namedtuple collections模組的namedtuple子類不僅可以使用item的index訪問item,還可以通過item的name(看成屬性)進行訪問。可以將namedtuple理解為c中的struct結構,其首先將各個item命名,然後對每個item賦予資料。

這樣一來,我們用namedtuple可以很方便地定義一種資料型別,它具備tuple的不變性,又可以根據屬性來訪問,使用十分方便。

from collections import namedtuple

# 定義一個namedtuple型別User,幷包含'math', 'chinese', 'english'屬性。
User = namedtuple('student', ['math', 'chinese', 'english'])

# 建立一個User物件
user = User(math=90, chinese=85, english=80)

# 也可以通過一個list來建立一個User物件,這裡注意需要使用"_make"方法
user = user._make([90, 60, 70])
print(user)

# 獲取使用者的屬性
print(user.math)
print(user.chinese)
print(user.english)

# 修改物件屬性,注意要使用"_replace"方法
user = user._replace(math=100)
print(user)

#  將User物件轉換成字典,注意要使用"_asdict"
print(user._asdict())

輸出如下

student(math=90, chinese=60, english=70)
90
60
70
student(math=100, chinese=60, english=70)
OrderedDict([('math', 100), ('chinese', 60), ('english', 70)])