Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Namedtuple ใน Python


NamedTuple เป็นคลาสอื่น ภายใต้โมดูลคอลเลกชัน เช่นเดียวกับอ็อบเจ็กต์ประเภทพจนานุกรม มันมีคีย์และที่แมปกับค่าบางค่า ในกรณีนี้ เราสามารถเข้าถึงองค์ประกอบโดยใช้คีย์และดัชนี

หากต้องการใช้งานในตอนแรก เราต้องนำเข้าโมดูลไลบรารีมาตรฐานของคอลเลกชัน

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() เพื่อแปลงอ็อบเจกต์แบบ iterable เช่น list, tuple เป็นต้น เป็นอ็อบเจกต์ 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')