python如何將多個(gè)映射合并為一個(gè)映射
python多個(gè)映射合并為一個(gè)映射
我們有時(shí)需要將多個(gè)字典合并成一個(gè)單獨(dú)的映射結(jié)構(gòu),但不同的字典之間可能有相同的鍵,又不想將鍵覆蓋掉,于是可以使用ChainMap類來實(shí)現(xiàn)。
它在邏輯上將不同的字典合并為一個(gè)單獨(dú)的映射結(jié)構(gòu)。
from pprint import pprint from collections import ChainMap a = {'x': 1, 'y': 2, 'z': 3} b = {'y': 4, 'z': 5, 'm': 6, 'n': 8} c = {'m': 6, 'n': 10, 'a': 7, 'b': 0, 'c': 9} d = ChainMap(a, b, c) pprint(d)
輸出結(jié)果
ChainMap({'x': 1, 'y': 2, 'z': 3},
{'m': 6, 'n': 8, 'y': 4, 'z': 5},
{'a': 7, 'b': 0, 'c': 9, 'm': 6, 'n': 10})
ChainMap接受多個(gè)映射然后在邏輯上表現(xiàn)為一個(gè)單獨(dú)的映射。但是,這些字典并不會(huì)在事實(shí)上合并在一起。
ChainMap只是簡單地維護(hù)一個(gè)記錄底層映射關(guān)系的列表,然后重新定義常見的字典操作來掃描這個(gè)列表。
print(list(d.keys())) print(list(d.values()))
每次運(yùn)行輸出的序列的值的順序都不相同
['x', 'n', 'a', 'm', 'y', 'b', 'c', 'z']
[1, 8, 7, 6, 2, 0, 9, 3]
.
.
.
['a', 'x', 'm', 'y', 'n', 'z', 'b', 'c']
[7, 1, 6, 2, 8, 3, 0, 9]
如果有重復(fù)的鍵,那么會(huì)輸出第一個(gè)查到的鍵。
print(d['n']) 8
python合并多個(gè)字典或者映射
python 中很多時(shí)候會(huì)用到合并多個(gè)字典
首先我們介紹一個(gè)collections模塊中的ChairMap類
from collections import ChainMap a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } c = ChainMap(a,b)
如果模塊中的鍵是相同的 會(huì)返回第一個(gè)值 , 因?yàn)槭怯成?,所以對(duì)它的操作都會(huì)對(duì)原數(shù)組有操作。
如果不想改變?cè)瓉頂?shù)組可以使用python 中的update()
a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } merged = dict(b) merged.update(a)
它需要你創(chuàng)建一個(gè)完全不同的字典對(duì)象(或者是破壞現(xiàn)有字典結(jié)構(gòu))。 同時(shí),如果原字典做了更新,這種改變不會(huì)反應(yīng)到新的合并字典中去。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows下Python安裝、使用教程和Notepad++的使用教程
這篇文章主要介紹了windows下Python安裝、使用教程和Notepad++的使用教程,需要的朋友可以參考下2019-10-10

Django--權(quán)限Permissions的例子

python數(shù)據(jù)分析基礎(chǔ)知識(shí)之shape()函數(shù)的使用教程

Scrapy框架基本命令與settings.py設(shè)置

Windows系統(tǒng)下PhantomJS的安裝和基本用法