lintcode-solutions
  • LintCode 刷题笔记
  • 课程笔记
    • Backtracking
    • Binary Search
    • Divide & Conquer
    • Breadth First Search
    • Depth First Search
    • Linked List & Array
    • Two Pointers
    • Stack, Queue and Heap
    • Dynamic Programming
    • Two Pointers Advanced
    • Union Find and Trie
    • Dynamic Programming Advanced
  • 基础知识储备
    • Python
      • Stack and Queue
      • Namedtuple
      • Priority Queue
      • isinstance()
      • OrderedDict
      • set and frozen set
      • Counter
      • Heap
    • Bit Manipulation
    • Fenwick Tree or Binary Indexed Tree
    • Rabin-Karp Algorithm
    • Sort
      • Merge Sort
      • Quick Sort
      • Heap Sort
  • LintCode 练习题
    • Binary Search
  • OJ Review
    • Aug 7, 2018
    • Aug 8, 2018
    • Aug 9, 2018
    • Aug 13, 2018
    • Aug 17, 2018
    • Aug 19, 2018
    • Aug 24, 2018
    • Aug 26, 2018
    • Aug 27, 2018
    • Aug 29, 2018
    • Sep 1, 2018
    • Sep 2, 2018
    • Sep 3, 2018
    • Sep 4, 2018
    • Oct 28, 2018
    • Nov 13, 2018
Powered by GitBook
On this page
  • Namedtuple in Python
  • Operations on namedtuple()
  • References
  1. 基础知识储备
  2. Python

Namedtuple

PreviousStack and QueueNextPriority Queue

Last updated 6 years ago

Namedtuple in Python

Python supports a type of container like called namedtuples() present in module, collections. Like dictionaries they contain keys that are hashed to a particular value. But on contrary, it supports both access from key value and iteration, the functionality that dictionaries lack.

Operations on namedtuple()

Access Operations

  1. Access by index : The attribute values of namedtuple() are ordered and can be accessed using the index number unlike dictionaries which are not accessible by index.

  2. Access by keyname : Access by keyname is also allowed as in dictionaries.

  3. using getattr() :- This is yet another way to access the value by giving namedtuple and key value as its argument.

# Python code to demonstrate namedtuple() and
# Access by name, index and getattr()

# importing "collections" for namedtuple()
import collections

# Declaring namedtuple() 
Student = collections.namedtuple('Student',['name','age','DOB']) 

# Adding values
S = Student('Nandini','19','2541997')

# Access using index
print("The Student age using index is : ",end ="")
print(S[1])

# Access using name
print("The Student name using keyname is : ",end ="")
print(S.name)

# Access using getattr()
print("The Student DOB using getattr() is : ",end ="")
print(getattr(S,'DOB'))

Output:

The Student age using index is : 19
The Student name using keyname is : Nandini
The Student DOB using getattr() is : 2541997

Conversion Operations

  1. _make() :- This function is used to return a namedtuple() from the iterable passed as argument.

  2. using “**” (double star) operator :- This function is used to convert a dictionary into the namedtuple().

#Python code to demonstrate namedtuple() and
# _make(), _asdict() and "**" operator

# importing "collections" for namedtuple() 
import collections

# Declaring namedtuple()
Student = collections.namedtuple('Student', ['name', 'age', 'DOB'])

# Adding values
S = Student('Nandini', '19', '2541997')

# initializing iterable
li = ['Manjeet', '19', '411997']

# initializing dict
di = {
    'name': "Nikhil",
    'age': 19,
    'DOB': '1391997'
}

# using _make() to return namedtuple()
print("The namedtuple instance using iterable is  : ")
print(Student._make(li))

# using _asdict() to return an OrderedDict()
print("The OrderedDict instance using namedtuple is  : ")
print(S._asdict())

# using ** operator to return namedtuple from dictionary
print("The namedtuple instance from dict is  : ")
print(Student( ** di))

Output :

The namedtuple instance using iterable is  : 
Student(name='Manjeet', age='19', DOB='411997')
The OrderedDict instance using namedtuple is  : 
OrderedDict([('name', 'Nandini'), ('age', '19'), ('DOB', '2541997')])
The namedtuple instance from dict is  : 
Student(name='Nikhil', age=19, DOB='1391997')

Additional Operations

  1. _fields :- This function is used to return all the keynames of the namespace declared.

  2. _replace() :- This function is used to change the values mapped with the passed keyname.

# Python code to demonstrate namedtuple() and
# _fields and _replace()
  
# importing "collections" for namedtuple()
import collections
  
# Declaring namedtuple()
Student = collections.namedtuple('Student',['name','age','DOB']) 
  
# Adding values 
S = Student('Nandini','19','2541997')

# using _fields to display all the keynames of namedtuple() 
print ("All the fields of students are : ")
print (S._fields)

# using _replace() to change the attribute values of namedtuple 
print ("The modified namedtuple is : ")
print(S._replace(name = 'Manjeet'))

Output:

All the fields of students are : 
('name', 'age', 'DOB')
The modified namedtuple is : 
Student(name='Manjeet', age='19', DOB='2541997')

References

_asdict() :- This function returns the as constructed from the mapped values of namedtuple().

dictionaries
OrdereDict()
https://www.geeksforgeeks.org/namedtuple-in-python/