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 相关文章推荐
pycharm 使用心得(二)设置字体大小
Jun 05 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
利用Python读取文件的四种不同方法比对
May 18 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
python 提取文件指定列的方法示例
Aug 07 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 Python
pytorch锁死在dataloader(训练时卡死)
May 28 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
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
jQuery.parseHTML() 函数详解
2017/01/09 Javascript
js实现3d悬浮效果
2017/02/16 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
Python正则捕获操作示例
2017/08/19 Python
python实现装饰器、描述符
2018/02/28 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
python实现飞机大战微信小游戏
2020/03/21 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
abstract是什么意思
2012/02/12 面试题
办公室内勤工作职责
2013/12/11 职场文书
生产部岗位职责范文
2014/02/07 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
寒假致家长的一封信
2015/10/10 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
Python中super().__init__()测试以及理解
2021/12/06 Python
vue实现移动端div拖动效果
2022/03/03 Vue.js
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android