本文實(shí)例講述了Python將多個(gè)映射合并為單個(gè)映射的方法。分享給大家供大家參考,具體如下:
問(wèn)題:在邏輯上將多個(gè)字典或映射合并為一個(gè)單獨(dú)的映射結(jié)構(gòu),以此執(zhí)行某些特定的操作,比如查找值或者檢查鍵是否存在
解決方案:利用collections
模塊中的ChainMap
類(lèi)
ChainMap
可接受多個(gè)映射然后在邏輯上使它們表現(xiàn)為一個(gè)單獨(dú)的映射結(jié)構(gòu)。這些映射在字面上并不會(huì)合并在一起。相反,ChainMap
只是簡(jiǎn)單地維護(hù)一個(gè)記錄底層映射關(guān)系的列表,然后重定義常見(jiàn)的字典操作來(lái)掃描這個(gè)列表。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# 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) #如果有重復(fù)的鍵,那么會(huì)采用第一個(gè)映射中所對(duì)應(yīng)的值。 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' ]) |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
>>> = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 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 >>> |
另外ChainMap操作的是原始字典,可以避免一些令人不悅的行為,例如其中任何一個(gè)原始字典的修改無(wú)法反應(yīng)到合并后的字典中。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> 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 }) >>> |
(代碼摘自《Python Cookbook》)
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
原文鏈接:http://www.cnblogs.com/apple2016/p/5751301.html