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将多个list合并为1个list的方法
Jun 27 Python
Python+Pandas 获取数据库并加入DataFrame的实例
Jul 25 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
python中数组和矩阵乘法及使用总结(推荐)
May 18 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
详解python statistics模块及函数用法
Oct 27 Python
解决django model修改添加字段报错的问题
Nov 18 Python
wxPython实现文本框基础组件
Nov 18 Python
Django自定义列表 models字段显示方式
Apr 03 Python
降低python版本的操作方法
Sep 11 Python
python 基于opencv 绘制图像轮廓
Dec 11 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 02 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
PHP 函数语法介绍一
2009/06/14 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
php类常量用法实例分析
2015/07/09 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
jQuery 表格工具集
2010/04/25 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
建筑班组长岗位职责
2014/01/02 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
质检部经理岗位职责
2014/02/19 职场文书
物流管理专业求职信
2014/05/29 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书