Named Tuples in Python With Example
Named tuples subclass standard tuple types and add a layer to assign property names to the positional elements. Using named tuples we can assign name to elements in tuple and these elements can be accessed using dot notation just like accessing property from object instance.
Why to Use Named Tuples?
You should use named tuples instead of tuples to make your code more object oriented and pythonic like so that it is easy to read and understand.
Named Tuples Example
Named tuples are located in the standard library module called collections
. It can be imported using from collections import namedtuple
Following examples illustrates the concept of namedtuple:
Using Positional Arguments
# importing named tuple
from collections import namedtuple
# using named tuple
Person = namedtuple('Person','name age country')
# creating named tuple
p1 = Person("Jeffery Way", 38, "United States")
# accessing elements using property name
print("Name:", p1.name)
print("Age:", p1.age)
print("Country:", p1.country)
Output
Name: Jeffery Way Age: 38 Country: United States
Using Keyword Arguments
from collections import namedtuple
Point3D = namedtuple('Point3D', 'x y z')
# You can use keyword arguments as well
pt = Point3D(x= 10, y = 30, z = 20)
print("Point is: ", pt)
Output
Point is: Point3D(x=10, y=30, z=20)
Explanation
Named tuple is not a new data structure type but it is a function that generates new classes. So it is a class factory. New classes which are generated using namedtuple inherit from standard tuple class but they also provide named properties to access elements of the tuple.
Remember instance of new class is still a tuple and all operations that can be done with tuple are valid. See example below:
from collections import namedtuple
Point3D = namedtuple('Point3D', 'x y z')
pt = Point3D(10, 30, 20)
print("Maximum value in point is: ", max(pt))
print("Minimum value in point is: ", min(pt))
print("Point is: ", pt)
print("And fields in point are: ", pt._fields)
Output
Maximum value in point is: 30 Minimum value in point is: 10 Point is: Point3D(x=10, y=30, z=20) And fields in point are: ('x', 'y', 'z')
When we use named tuples, we are essentially creating a new class. namedtuple needs a few things to generate this class:
- The class name we want to use. In the above example,
'Person'
is class name. - A sequence of field strings we want to assign, in the order of the elements in the tuple field. In the above example,
'name age country'
are field names.
Name can be any valid identifier except they can not start with underscore ( _ ).
If you want to use underscore ( _ ) pass keyword arguments like:rename = True
in functionnamedtuple()
.
The return value of the namedtuple
will be a class. We need to assign this class to a variable name so we can use it to construct instances. In general, we use the same name as the name of the class that was generated. So, Person is used as a variable name for class.