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
广告