Home  >  Article  >  Backend Development  >  Python cookbook (data structures and algorithms) combines multiple mappings into a single mapping

Python cookbook (data structures and algorithms) combines multiple mappings into a single mapping

不言
不言Original
2018-04-19 13:45:381493browse

This article mainly introduces the method of Python cookbook (data structure and algorithm) to merge multiple mappings into a single mapping. It analyzes the implementation skills related to Python dictionary mapping merging operations in the form of examples. Friends in need can refer to the following

The examples in this article describe Python's method of merging multiple mappings into a single mapping. Share it with everyone for your reference, as follows:

Question: Logically merge multiple dictionaries or mappings into a single mapping structure to perform certain specific operations, For example, looking up a value or checking whether a key exists

Solution: Use the ChainMap class in the collections module

ChainMapAccepts multiple mappings and logically behaves them as a single mapping structure. These mappings are not literally merged together. Instead, ChainMap simply maintains a list recording the underlying mapping relationships, and then redefines common dictionary operations to scan this list.

# example.py
#
# Example of combining dicts into a chainmap
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
# (a) Simple example of combining
from collections import ChainMap
c = ChainMap(a,b) #如果有重复的键,那么会采用第一个映射中所对应的值。
print(c['x'])   # Outputs 1 (from a)
print(c['y'])   # Outputs 2 (from b)
print(c['z'])   # Outputs 3 (from a)
# Output some common values
print('len(c):', len(c))
print('c.keys():', list(c.keys()))
print('c.values():', list(c.values()))
# Modify some values
c['z'] = 10
c['w'] = 40
print("a:", a)
del c['x']
print("a:", a)
# Example of stacking mappings (like scopes)
values = ChainMap()
values['x'] = 1
# Add a new mapping
values = values.new_child()
values['x'] = 2
# Add a new mapping
values = values.new_child()
values['x'] = 3
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])

>>> ================================ RESTART ================================
>>>
1
2
3
len(c): 3
c.keys(): ['y', 'x', 'z']
c.values(): [2, 1, 3]
a: {'x': 1, 'z': 10, 'w': 40}
a: {'z': 10, 'w': 40}
ChainMap({'x': 3}, {'x': 2}, {'x': 1})
3
ChainMap({'x': 2}, {'x': 1})
2
ChainMap({'x': 1})
1
>>>

In addition, ChainMap operates on the original dictionary, which can avoid some unpleasant behaviors. For example, modifications to any of the original dictionaries cannot be reflected in the merged dictionary.

>>> a={'x':1,'z':3}
>>> b={'y':2,'z':4}
>>> merged=ChainMap(a,b)
>>> merged
ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
>>> merged['x']
1
>>> a['x']=55
>>> merged['x']
55
>>> merged
ChainMap({'x': 55, 'z': 3}, {'y': 2, 'z': 4})
>>>

(Code is excerpted from "Python Cookbook")

Related recommendations:

Python cookbook(String with text) Split string operations for any number of delimiters

The above is the detailed content of Python cookbook (data structures and algorithms) combines multiple mappings into a single mapping. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn