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通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python 备份程序代码实现
Mar 06 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
python调用动态链接库的基本过程详解
Jun 19 Python
Python面向对象编程基础实例分析
Jan 17 Python
python手写均值滤波
Feb 19 Python
Python函数基本使用原理详解
Mar 19 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
Python根据字符串调用函数过程解析
Nov 05 Python
详解python日志输出使用配置文件格式
Feb 10 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 Python
python 实现德洛内三角剖分的操作
Apr 22 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个人网站架设连环讲(三)
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php计算title标题相似比的方法
2015/07/29 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
JS替换字符串中空格方法
2015/04/17 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
Bootstrap table右键功能实现方法
2017/02/20 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
小程序实现投票进度条
2019/11/20 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
在Python中使用列表生成式的教程
2015/04/27 Python
Django中Forms的使用代码解析
2018/02/10 Python
python中强大的format函数实例详解
2018/12/05 Python
对Python实现累加函数的方法详解
2019/01/23 Python
python中提高pip install速度
2020/02/14 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
为什么python比较流行
2020/06/19 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
上学迟到的检讨书
2014/01/11 职场文书
模具专业自荐信
2014/05/29 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
Java中的继承、多态以及封装
2022/04/11 Java/Android