Python中的命名元组

NamedTuple是collections模块下的另一个类。像字典类型的对象一样,它包含键,并映射到某些值。在这种情况下,我们可以使用键和索引访问元素。

首先要使用它,我们需要将其导入集合标准库模块。

import collections

在本节中,我们将看到NamedTuple类的一些功能。

NamedTuple的访问方法

在NamedTuple中,我们可以使用索引,键和getattr()方法访问值。NamedTuple的属性值是有序的。这样我们就可以使用索引访问它们。

NamedTuple将字段名称转换为属性。因此使用getattr()可以从该属性获取数据。

范例程式码

import collections as col
#create employee NamedTuple
Employee = col.namedtuple('Employee', ['name', 'city', 'salary'])
#Add two employees
e1 = Employee('Asim', 'Delhi', '25000')
e2 = Employee('Bibhas', 'Kolkata', '30000')
#Access the elements using index
print('The name and salary of e1: ' + e1[0] + ' and ' + e1[2])
#Access the elements using attribute name
print('The name and salary of e2: ' + e2.name + ' and ' + e2.salary)
#Access the elements using getattr()print('The City of e1 and e2: ' + getattr(e1, 'city') + ' and ' + getattr(e2, 'city'))

输出结果

The name and salary of e1: Asim and 25000
The name and salary of e2: Bibhas and 30000
The City of e1 and e2: Delhi and Kolkata

NamedTuple的转换过程

有一些方法可以将其他集合转换为NamedTuple。_make()方法可用于将可迭代对象(如列表,元组等)转换为NamedTuple对象。

我们还可以将字典类型的对象转换为NamedTuple对象。对于此转换,我们需要**运算符。

NamedTuple可以使用键作为OrderedDict类型对象返回值。要使其成为OrderedDict,我们必须使用_asdict()方法。

范例程式码

import collections as col
#create employee NamedTuple
Employee = col.namedtuple('Employee', ['name', 'city', 'salary'])
#List of values to Employee
my_list = ['Asim', 'Delhi', '25000']
e1 = Employee._make(my_list)
print(e1)
#Dict to convert Employee
my_dict = {'name':'Bibhas', 'city' : 'Kolkata', 'salary' : '30000'}
e2 = Employee(**my_dict)
print(e2)
#Show the named tuple as dictionary
emp_dict = e1._asdict()
print(emp_dict)

输出结果

Employee(name='Asim', city='Delhi', salary='25000')
Employee(name='Bibhas', city='Kolkata', salary='30000')
OrderedDict([('name', 'Asim'), ('city', 'Delhi'), ('salary', '25000')])

NamedTuple上的一些其他操作

还有其他一些方法,例如_fields()和_replace()。使用_fields()方法,我们可以检查NamedTuple的不同字段。_replace()方法用于替换其他一些值。

范例程式码

import collections as col
#create employee NamedTuple
Employee = col.namedtuple('Employee', ['name', 'city', 'salary'])
#Add an employees
e1 = Employee('Asim', 'Delhi', '25000')
print(e1)
print('The fields of Employee: ' + str(e1._fields))
#replace the city of employee e1
e1 = e1._replace(city='Mumbai')
print(e1)

输出结果

Employee(name='Asim', city='Delhi', salary='25000')
The fields of Employee: ('name', 'city', 'salary')
Employee(name='Asim', city='Mumbai', salary='25000')