Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Python collections.ChainMap



In Python, ChainMap class is used to convert multiple dictionaries or mappings into single unit. If no maps are specified, a single empty dictionary is provided so that a new chain always has at least one mapping.

The ChainMap() class is defined in Collections module. It is often much faster than creating a new dictionary.

Syntax

Following is the syntax of the Python ChainMap()

collections.ChainMap(iterable1, iterable2, iterable3)

Parameters

This data-type accepts an iterables as a parameters

Return Value

This data-type returns a new ChainMap object, which maps multiple iterable.

Example

Following is an basic example of the Python ChainMap()

# Python program to demonstrate 
# ChainMap 	
from collections import ChainMap 	
d1 = {'one': 1, 'two': 2} 
d2 = {'three': 3, 'four': 4} 
d3 = {'five': 5, 'six': 6} 	
# Defining the chainmap 
c = ChainMap(d1, d2, d3) 	
print(c) 

Following is the output of the above code −

ChainMap({'one': 1, 'two': 2}, {'three': 3, 'four': 4}, {'five': 5, 'six': 6})

Using ChainMap for Nested Scope Simulation

The ChainMap() class can be used to simulate nested scopes and is useful in templating. It allows us to combine multiple dictionaries or mappings into a single unit, so we can search for an element across all dictionaries as if they were one. Instead of searching each dictionary individually, ChainMap checks each one in order of priority and stops as soon as it finds a match.

Example

In the following example ChainMap() with nested scopes −

from collections import ChainMap
default_settings = {'theme': 'dark', 'font': 'Arial', 'size': 12}
user_settings = {'theme': 'light', 'size': 14}
# ChainMap gives priority to the first dictionary (user_settings)
settings = ChainMap(user_settings, default_settings)
print(settings['theme'])  
print(settings['font'])   

Following is the output of the above code −

light
Arial

Underlying Mappings in ChainMap

In the ChainMap class, the underlying mappings (dictionaries) are stored as a list. This list is accessible through the maps attribute, which allows you to directly view or modify the dictionaries being managed by the ChainMap.

Example

Here, is an example underlying mappings in ChainMap() −

from collections import ChainMap
# Two dictionaries
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
# Create a ChainMap
combined = ChainMap(dict1, dict2)
print(combined['b'])  
# Accessing the maps attribute
print(combined.maps)  
# Updating the order of dictionaries in the ChainMap
combined.maps = [dict2, dict1]
print(combined['b']) 

Following is the output of the above code −

2
[{'a': 1, 'b': 2}, {'b': 3, 'c': 4}]
3

Combining Multiple Lists Using ChainMap

The ChainMap() can also be used to convert multiple lists into single unit.

Example

Following is an example of using ChainMap() with list −

from collections import ChainMap 	
list1 = ['a','b','c','d']
list2 = [1, 2, 3, 4]
list3 = ['one','two','three']
chain_list = ChainMap(list1, list2, list3) 
print(chain_list)

Following is the output of the above code −

ChainMap(['a', 'b', 'c', 'd'], [1, 2, 3, 4], ['one', 'two', 'three'])

Access Operations in ChainMap

We can access all keys of the dictionaries in the ChainMap using keys() function. The values() function returns all the values of the dictionaries in ChainMap. maps() function is used to display keys with corresponding values of all the dictionaries in ChainMap.

Example

# keys(), values() and maps 
# importing collections for ChainMap operations 
import collections 
# initializing dictionaries 
dic1 = { 'Program1' : 'Python', 'Program2' : 'HTML' } 
dic2 = { 'Program3' : ' Java', 'Program4' : 'C' } 
# initializing ChainMap 
chain = collections.ChainMap(dic1, dic2) 
# printing chainMap using maps 
print ("All the ChainMap contents are : ") 
print (chain.maps) 
# printing keys using keys() 
print ("All keys of ChainMap are : ") 
print (list(chain.keys())) 
# printing keys using keys() 
print ("All values of ChainMap are : ") 
print (list(chain.values())) 

Following is the output of the above code −

All the ChainMap contents are : 
[{'Program1': 'Python', 'Program2': 'HTML'}, {'Program3': ' Java', 'Program4': 'C'}]
All keys of ChainMap are : 
['Program3', 'Program4', 'Program1', 'Program2']
All values of ChainMap are : 
[' Java', 'C', 'Python', 'HTML']

Methods in ChainMap

Following are methods defined in the ChainMap() class −

Method Function
new_child() adds a new dictionary or iterable in the beginning of the ChainMap
reversed() reverses the relative ordering of dictionaries or iterable in the ChainMap

Python ChainMap.new_child() Method

The new_child() method is used to add a new dictionary or iterable at the beginning of the ChainMap().

Example

In the following example we have added a new dictionary to the ChainMap() using new_child()

from collections import ChainMap 	
list1 = ['a','b','c','d']
list2 = [1, 2, 3, 4]
list3 = ['one','two','three']
chain_list = ChainMap(list1, list2) 
print(chain_list)
print(chain_list.new_child(list3))

Following is the output of the above code −

ChainMap(['a', 'b', 'c', 'd'], [1, 2, 3, 4])
ChainMap(['one', 'two', 'three'], ['a', 'b', 'c', 'd'], [1, 2, 3, 4])

Python ChainMap.reversed() Method

The reversed() method is used to reverse the dictionaries or iterables in the ChainMap.

Example

Following is an example of reversed() method in the ChainMap −

from collections import ChainMap
# Define multiple lists
list1 = ['a', 'b', 'c', 'd']
list2 = [1, 2, 3]
list3 = ['one', 'two']

# Create a ChainMap with the first two lists
chain_list = ChainMap(list1, list2) 

# Print the initial ChainMap
print("Original ChainMap -", chain_list)

# Reverse the order of maps in the original ChainMap (note: reversed() does not modify the list)
reversed_maps = list(reversed(chain_list.maps))  # This creates a reversed list

# Print the reversed order of maps (for demonstration)
print("Reversed maps -", reversed_maps)

Following is the output of the above code −

Original ChainMap - ChainMap(['a', 'b', 'c', 'd'], [1, 2, 3])
Reversed maps - [[1, 2, 3], ['a', 'b', 'c', 'd']]
Original maps after reversal attempt: [['a', 'b', 'c', 'd'], [1, 2, 3]]
python_modules.htm
Advertisements