Python - AI 助手

Python collections.ChainMap



在 Python 中,ChainMap 类用于将多个字典或映射转换为单个单元。如果未指定任何映射,则提供单个空字典,以便新的链始终至少具有一个映射。

ChainMap() 类在 Collections 模块中定义。它通常比创建新字典快得多。

语法

以下是 Python ChainMap() 的语法:

collections.ChainMap(iterable1, iterable2, iterable3)

参数

此数据类型接受迭代器作为参数。

返回值

此数据类型返回一个新的 ChainMap 对象,该对象映射多个可迭代对象。

示例

以下是 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) 

以下是上述代码的输出:

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

使用 ChainMap 模拟嵌套作用域

ChainMap() 类可用于模拟嵌套作用域,在模板中很有用。它允许我们将多个字典或映射组合成一个单元,因此我们可以像它们是一个一样在所有字典中搜索元素。ChainMap 会按优先级顺序检查每个字典,并在找到匹配项后立即停止,而不是单独搜索每个字典。

示例

在以下示例中,ChainMap() 与嵌套作用域一起使用:

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'])   

以下是上述代码的输出:

light
Arial

ChainMap 中的基础映射

在 ChainMap 类中,基础映射(字典)存储为列表。此列表可通过 maps 属性访问,该属性允许您直接查看或修改 ChainMap 管理的字典。

示例

这是一个在 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']) 

以下是上述代码的输出:

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

使用 ChainMap 合并多个列表

ChainMap() 还可以用于将多个列表转换为单个单元。

示例

以下是使用 ChainMap() 与列表的示例:

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)

以下是上述代码的输出:

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

ChainMap 中的访问操作

我们可以使用 keys() 函数访问 ChainMap 中所有字典的所有键。values() 函数返回 ChainMap 中所有字典的所有值。maps() 函数用于显示 ChainMap 中所有字典的键及其对应值。

示例

# 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())) 

以下是上述代码的输出:

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']

ChainMap 中的方法

以下是 ChainMap() 类中定义的方法:

方法 功能
new_child() 在 ChainMap 的开头添加一个新的字典或迭代器
reversed() 反转 ChainMap 中字典或迭代器的相对顺序

Python ChainMap.new_child() 方法

new_child() 方法用于在 ChainMap() 的开头添加一个新的字典或迭代器。

示例

在以下示例中,我们使用 new_child()ChainMap() 添加了一个新的字典:

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))

以下是上述代码的输出:

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

Python ChainMap.reversed() 方法

reversed() 方法用于反转 ChainMap 中的字典或迭代器。

示例

以下是 ChainMap 中 reversed() 方法的示例:

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)

以下是上述代码的输出:

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
广告