python中map函数字典映射_python Chainmap函数(19)
我們有多個字典,想把它們合并成為一個單獨的字典,有人說可以用update進行合并,這樣做的問題就是新建了一個數據結構以至于當我們對原來的字典進行更改的時候不會同步。如果想建立一個同步的查詢方法,可以使用ChainMap。
python內置函數ChainMap可以將多個字典合并為一個獨有的字典,這樣的操作 并不是對源數據的拷貝,而是指向源數據,假如原字典數據修改,ChainMap映射也會改變;如果對ChainMap的結果修改,那么原數據一樣也會被修改,這樣就不會造成數據不同步的問題,當然需要因使用場景而定。
一.ChainMap合并多個字典
使用ChainMap可以將多個字典串聯起來,當做一個字典來處理。
#!usr/bin/env python#-*- coding:utf-8 _*-
"""@Author:何以解憂
@Blog(個人博客地址): shuopython.com
@WeChat Official Account(微信公眾號):猿說python
@Github:www.github.com
@File:python_chainmap.py
@Time:2019/11/20 21:25
@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!"""
from collections importChainMap
dict1= {"a":"zhangsan","b":"lisi"}
dict2= {"c":"wangwu"}
dict3= {"d":"liqui","e":"laowang"}
new_dict=ChainMap(dict1,dict2,dict3)print(new_dict)print(type(new_dict))------------------------------------------------------------------------------------------輸出結果:
ChainMap({'a': 'zhangsan', 'b': 'lisi'}, {'c': 'wangwu'}, {'d': 'liqui', 'e': 'laowang'})
二.ChainMap查詢和遍歷
ChainMap函數將多個字典合并為一個字典,查詢和遍歷的方式和對普通字典的操作方式一樣,示例代碼如下:
from collections importChainMap
dict1= {"a":"zhangsan","b":"lisi"}
dict2= {"c":"wangwu"}
dict3= {"d":"liqui","b":"laowang"}
new_dict=ChainMap(dict1,dict2,dict3)#查詢,可以直接根據key值查新,和字典操作方式一樣
print(new_dict["a"])print(new_dict["b"]) #當多個字典中有相同的key值是,默認取第一個key對應的value
print(new_dict["c"])print("***"*20)#遍歷,可以直接根據key或者value遍歷,和普通字典一樣操作
for key,value innew_dict.items():print(key,":",value)
輸出結果:
zhangsan
lisi
wangwu************************************************************e : laowang
c : wangwu
d : liqui
a : zhangsan
b : lisi
注意:如果在使用ChainMap合并多個字典時,字典中有重復的key值,默認取第一個字典中key對用的value,從原理上面講,ChainMap實際上是把放入的字典存儲在一個隊列中,當進行字典的增加刪除等操作只會在第一個字典上進行,當進行查找的時候會依次查找!
三.ChainMap修改
maps 方法會將串聯起來的字典以列表的形式展示,示例代碼如下:
from collections importChainMap
dict1= {"a":"zhangsan","b":"lisi"}
dict2= {"c":"wangwu"}
dict3= {"d":"liqui","b":"laowang"}
new_dict=ChainMap(dict1,dict2,dict3)print("new_dict修改數據之后:",new_dict)print("dict1修改數據之前:",dict1)#操作列表中索引值為0的字典,修改key="a"對應的value
new_dict.maps[0]["a"]=18
print("new_dict修改數據之后:",new_dict)print("dict1修改數據之后:",dict1)
輸出結果:
new_dict修改數據之后: ChainMap({'a': 'zhangsan', 'b': 'lisi'}, {'c': 'wangwu'}, {'d': 'liqui', 'b': 'laowang'})
dict1修改數據之前: {'a': 'zhangsan', 'b': 'lisi'}
new_dict修改數據之后: ChainMap({'a': 18, 'b': 'lisi'}, {'c': 'wangwu'}, {'d': 'liqui', 'b': 'laowang'})
dict1修改數據之后: {'a': 18, 'b': 'lisi'}
注意:ChainMap使用就是原始字典,共用同一內存地址,因此原始數據修改,ChainMap映射也會改變;如果對ChainMap的結果修改,那么原數據一樣也會被修改
四.ChainMap增加
可以通過new_child()函數添加一個新的空白字典,然后像普通字典一樣操作添加數據,示例代碼如下:
from collections importChainMap
dict1= {"a":"zhangsan","b":"lisi"}
dict2= {"c":"wangwu"}#合并字典
new_dict =ChainMap(dict1,dict2)print(new_dict)#添加數據
new_dict1 =new_dict.new_child()print(new_dict1)
new_dict1["x"]=0
new_dict1["y"] = 100.0
print(new_dict1)
輸出結果:
ChainMap({'a': 'zhangsan', 'b': 'lisi'}, {'c': 'wangwu'})
ChainMap({}, {'a': 'zhangsan', 'b': 'lisi'}, {'c': 'wangwu'})
ChainMap({'x': 0, 'y': 100.0}, {'a': 'zhangsan', 'b': 'lisi'}, {'c': 'wangwu'})
總結:
總結
以上是生活随笔為你收集整理的python中map函数字典映射_python Chainmap函数(19)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java传参怎么理解_如何理解Java的
- 下一篇: Go桌面主题功能表怎么换行列数