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中的装饰器详解
Apr 13 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
python实现代码统计程序
Sep 19 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
基于python3的socket聊天编程
Feb 17 Python
python生成任意频率正弦波方式
Feb 25 Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
python中pycryto实现数据加密
Apr 29 Python
python标准库ElementTree处理xml
May 20 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
PHP4(windows版本)中的COM函数
2006/10/09 PHP
php学习之变量的使用
2011/05/29 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
PHP getName()函数讲解
2019/02/03 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
Python 错误和异常小结
2013/10/09 Python
跟老齐学Python之Import 模块
2014/10/13 Python
分析在Python中何种情况下需要使用断言
2015/04/01 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
python+os根据文件名自动生成文本
2019/03/21 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
中药专业大学生医药工作求职信
2013/10/25 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
环境科学专业求职信
2014/08/04 职场文书
Java数据结构之链表相关知识总结
2021/06/18 Java/Android
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript