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 22 Python
详解基于django实现的webssh简单例子
Jul 17 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
Python向excel中写入数据的方法
May 05 Python
聊聊python里如何用Borg pattern实现的单例模式
Jun 06 Python
python生成特定分布数的实例
Dec 05 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
Numpy ndarray 多维数组对象的使用
Feb 10 Python
asyncio异步编程之Task对象详解
Mar 13 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
php swoft框架实例用法
2020/12/22 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
JavaScript中的this机制
2016/01/30 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
使用JS动态显示文本
2017/09/09 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
jQuery实现增删改查
2020/12/22 jQuery
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python实现图片横向和纵向拼接
2020/03/05 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
英国著名的茶叶品牌:Whittard of Chelsea
2016/09/22 全球购物
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
使用Ajax实现无刷新上传文件
2022/04/12 Javascript