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')