python ChainMap 合并字典的实现步骤


Posted in Python onJune 11, 2019

字典是Python语言中唯一的映射类型。

映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。
字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。

字典类型与序列类型的区别:

1. 存取和访问数据的方式不同。
2. 序列类型只用数字类型的键(从序列的开始按数值顺序索引);
3. 映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直4.接或间接地和存储数据值相关联。
5. 映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。
6. 映射类型用键直接“映射”到值。

字典是Python中最强大的数据类型之一。 

ChainMap对象支持字典对象的所有方法,你可以完全像操作字典一样操作它。但是它不会真的把字典合并在一起,而是在内部储存一个Key到每个字典的映射,当你读取 e[key]的时候,它先去查询这个key在哪个字典里面,然后再去对应的字典里面查询对应的值。所以使用ChainMap几乎不需要额外的内存空间(当然这个对象自己会占用一些空间,但是如果要合并大字典,那么它自己占用的空间几乎可以忽略)。

from collections import ChainMap

a = {'a': 1, 'b': 2}
b = {'x': 3, 'y': 4}
a.update(b)
print(a)

c = ChainMap(a, b)
print(c['a'])

如果两个字典里面有一个Key的名字相同, ChainMap对象会使用第一个拥有这个Key的字典里面的值

a = {'a': 1, 'b': 2}
b = {'a': 3, 'y': 4}

c = ChainMap(a, b)
print(c['a'])

如果为ChainMap对象添加一个Key-Value对, 新的Key-Value会被添加进第一个字典里面

a = {'a': 1, 'b': 2}
b = {'a': 3, 'y': 4}

c = ChainMap(a, b)
c['new'] = "新值"
print(a)

如果从原字典里面删除一个Key, ChainMap对象也会相应更新

a = {'a': 1, 'b': 2}
b = {'a': 3, 'y': 4}

c = ChainMap(a, b)
print('w' in c)
a['w'] = '新值'
print('w' in c)

如果从ChainMap对象里面删除一个Key,如果这个Key只在一个源字典中存在,那么这个Key会被从源字典中删除。如果这个Key在多个字典中都存在,那么Key会被从第一个字典中删除。当被从第一个字典中删除以后,第二个源

字典的Key可以ç»§续被ChainMap读取

不能删除第一个字典 a 里不存在的key

a = {'a': 1, 'b': 2}
b = {'aa': 3, 'a': 4}

c = ChainMap(a, b)
c.pop('a') # 只能删除 a 里的 k,删 b 会报错
print(a, b)
print(c['a'])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python读写Redis数据库操作示例
Mar 18 Python
Python中apply函数的用法实例教程
Jul 31 Python
Python中set与frozenset方法和区别详解
May 23 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
Python常用的json标准库
Feb 19 Python
python命令行参数用法实例分析
Jun 25 Python
django框架ModelForm组件用法详解
Dec 11 Python
Python读写锁实现实现代码解析
Nov 28 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
Python try except finally资源回收的实现
Jan 25 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
itchat-python搭建微信机器人(附示例)
Jun 11 #Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 #Python
python 将字符串完成特定的向右移动方法
Jun 11 #Python
python itchat给指定联系人发消息的方法
Jun 11 #Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 #Python
使用Python实现将list中的每一项的首字母大写
Jun 11 #Python
Python中@property的理解和使用示例
Jun 11 #Python
You might like
PHP多个版本的分析解释
2011/07/21 PHP
php日历制作代码分享
2014/01/20 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
fullpage.js最后一屏滚动方式
2018/02/06 Javascript
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
对numpy中shape的深入理解
2018/06/15 Python
基于Python的OCR实现示例
2020/04/03 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
高级Java程序员面试题
2016/06/23 面试题
国际经济贸易专业推荐信
2013/11/06 职场文书
银行门卫岗位职责
2013/12/29 职场文书
自立自强的名人事例
2014/02/10 职场文书
应届生找工作求职信
2014/06/24 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
任命书格式模板
2015/09/22 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js