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