Python - AI 助手

Python collections.namedtuple



Python 中的namedtuple()是來自collections模組的一種資料型別。它為元組中的每個位置分配一個名稱,允許透過欄位名稱訪問元素,類似於我們透過索引訪問元組中的元素。

namedtuple()類返回一個名為typename的新元組子類。新子類用於建立類似元組的物件,這些物件具有可透過屬性訪問的欄位,並且可索引和可迭代。我們可以透過typename欄位名稱和傳遞索引值來訪問元素。

語法

以下是Python namedtuple()資料型別的語法:

class collections.namedtuple(typename, field_names, rename, default)

引數

此類接受以下引數:

  • typename:它返回一個名為typename[元組名稱]的新元組子類。新子類用於建立類似元組的物件,這些物件具有可透過屬性訪問的欄位,並且可索引和可迭代。我們可以透過typename欄位名稱和傳遞索引值來訪問元素。

  • field_names:它可以是字串序列,例如['x', 'y'],也可以是單個字串,其中欄位名以空格或逗號分隔。例如,'x y' 'x, y'。field_name可以是任何Python識別符號,但名稱不能以下劃線或數字開頭,也不能是關鍵字。

  • rename:如果為真,則無效的欄位名會自動替換為位置名稱。例如,['xyz', 'class', 'mno', 'pqr']將轉換為['xyz', '4', 'mno', 'pqr'],消除了關鍵字class關鍵字。

  • default:它可以是Noneiterable的預設值。由於具有預設值的欄位必須位於任何沒有預設值的欄位之後,因此預設值將應用於最右邊的引數。例如,如果欄位名為['p', 'q', 'r'],預設值為(10,20),則p將是必需的引數,q將預設為10,r將預設為20。

返回值

此類返回一個新的子類元組。

示例

以下是Python namedtuple()資料型別的基本示例:

from collections import namedtuple
student1 = namedtuple('student1',['name','rollno', 'marks'])
var = student1(name = 'Sai',rollno=237, marks=89)
print("Name :",var.name)
print("Rollno :",var.rollno)
print("Marks :",var.marks)

以下是以上程式碼的輸出:

Name : Sai
Rollno : 237
Marks : 89

使用帶_.make()的namedtuple()

_.make()將使用可迭代物件初始化現有namedtuple的值。它接受iterable作為引數。

示例

這裡,我們使用namedtuple()建立了一個名為student1的元組,並使用make()方法替換了它的元素:

from collections import namedtuple
student1 = namedtuple('student1',['name','rollno', 'marks'])
var = student1('John', 202, 75)
print(var)
tup1 = [12, 45, 89]
print(student1._make(tup1))

以下是以上程式碼的輸出:

student1(name='John', rollno=202, marks=75)
student1(name=12, rollno=45, marks=89)

使用帶._asdict()的namedtuple()

使用namedtuple()類建立的元組可以透過_asdict()方法轉換為字典。

示例

這裡,我們有一個名為dic1的元組,並使用_asdict()方法將其轉換為字典:

from collections import namedtuple
dic1 = namedtuple('dic1',['Telangana','TamilNadu', 'Karnataka'])
var = dic1('Hyderabad', 'Chennai', 'Bangalore',)
print(var._asdict())

以下是以上程式碼的輸出:

{'Telangana': 'Hyderabad', 'TamilNadu': 'Chennai', 'Karnataka': 'Bangalore'}

使用帶._replace()的namedtuple()

replace()方法返回一個名為元組的新例項,用新值替換指定的欄位。

示例

以下是replace()namedtuple一起使用的示例:

from collections import namedtuple
list1 = namedtuple('list1',['x', 'y']) 
var = list1(x=10, y=90)
print(var._replace(x=55))

以下是以上程式碼的輸出:

list1(x=55, y=90)

使用帶_field的namedtuple()

_field()方法用於連線兩個namedtuple和列出欄位名的字串元組。對於內省和從現有namedtuple建立新的namedtuple型別很有用。

示例

這裡,我們建立了兩個元組,並使用_fields將它們連線到一個元組中,並分配了值:

from collections import namedtuple
tup1 = namedtuple('tup1',['x1','y1','z1'])
tup2 = namedtuple('tup2',['x2','y2','z2'])
Newtup = namedtuple('Newtup', tup1._fields + tup2._fields)
res = Newtup(12,14,16,18,20,22)
print(res)

以下是以上程式碼的輸出:

Newtup(x1=12, y1=14, z1=16, x2=18, y2=20, z2=22)

使用帶_field_defaults的namedtuple

欄位名到預設值的對映字典是使用命名元組中的_field_defaults方法完成的。如果傳遞的引數少於定義的字串列表,則其他引數將使用預設值。

示例

這裡,我們建立了一個命名元組My_tup1,它有兩個欄位名,並給出了預設值-1。我們向My_tup1傳遞了一個值,但由於_field_defaults()方法,最終產生了兩個值。

from collections import namedtuple
My_tup1 = namedtuple('My_tup1',['val1', 'val2'],defaults=[-1])
res = My_tup1._field_defaults
print("default value :",res)
print(My_tup1(12))

以下是以上程式碼的輸出:

default value : {'val2': -1}
My_tup1(val1=12, val2=-1)
python_modules.htm
廣告