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 发送邮件实例代码
Dec 22 Python
Selenium定位元素操作示例
Aug 10 Python
python实现ip代理池功能示例
Jul 05 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
使用IPython或Spyder将省略号表示的内容完整输出
Apr 20 Python
python用Configobj模块读取配置文件
Sep 26 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
Python基于内置函数type创建新类型
Oct 22 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 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
php中的一个中文字符串截取函数
2007/02/14 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
python实现俄罗斯方块游戏
2020/03/25 Python
Python多进程fork()函数详解
2019/02/22 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
单身旅行者的单身假期:Just You
2018/04/08 全球购物
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
住宅使用说明书
2014/05/09 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
何玥事迹观后感
2015/06/16 职场文书
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android