Named tuples assign meaning to each position in a tuple and allow for more readable, self-documenting code.
They can be used wherever regular tuples are used, and they add the ability to access fields by name instead of position index.
The namedtuple is an immutable container type, whose values can be accessed with indexes and named attributes. It has functionality like tuples with additional features.
A named tuple is created with the collections.namedtuple
factory function.
Access Operations
Access the elements by using index
Access the elements using attribute name
Access the elements using getattr()
import collections as col # create Countries NamedTuple Countries = col.namedtuple('Country', ['name', 'capital', 'population']) # Add four Countries country1 = Countries('Germany', 'Berlin', '83190556') country2 = Countries('Spain', 'Madrid', '47450795') country3 = Countries('Italy', 'Rome', '60317116') country4 = Countries('France', 'Paris', '67413000') # Access the elements by using index print('The name and capital of country1: ' + country1[0] + ' and ' + country1[1]) print('The name and capital of country2: ' + country2[0] + ' and ' + country2[1]) # Access the elements using attribute name print('The name and capital of country3: ' + country3.name + ' and ' + country3.capital) print('The name and capital of country4: ' + country4.name + ' and ' + country4.capital) # Access the elements using getattr() print('The capital of country1 and country2: ' + getattr(country1, 'capital') + ' and ' + getattr(country2, 'capital')) print('The capital of country3 and country4: ' + getattr(country3, 'capital') + ' and ' + getattr(country4, 'capital'))
This displayed the following
>>> %Run namedtupleexample1.py The name and capital of country1: Germany and Berlin The name and capital of country2: Spain and Madrid The name and capital of country3: Italy and Rome The name and capital of country4: France and Paris The capital of country1 and country2: Berlin and Madrid The capital of country3 and country4: Rome and Paris
Lets look at another example
This demonstrates another couple of operations
_fields: This function is used to return all the keynames of the namespace declared.
_replace(): This is like str.replace() but targets named fields, it does modify the namedTuple it returns a new namedtuple
import collections as col # create Countries NamedTuple Countries = col.namedtuple('Country', ['name', 'capital', 'population']) # Add four Countries country1 = Countries('Germany', 'Berlin', '83190556') country2 = Countries('Spain', 'Madrid', '47450795') country3 = Countries('Italy', 'Rome', '60317116') country4 = Countries('France', 'Paris', '67413000') print(country1._fields) # ._replace returns a new namedtuple print(country1._replace(name='Allemagne')) # original namedtuple print(country1)
This displayed the following
>>> %Run namedtupleexample2.py ('name', 'capital', 'population') Country(name='Allemagne', capital='Berlin', population='83190556') Country(name='Germany', capital='Berlin', population='83190556')