[00020]合并多个字典或映射
2017-01-13 13:24
295 查看
合并多个字典或映射
一、 解决问题
现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作二、解决方案
collections.ChainMapdict.update
三、代码说明
a = {'x': 1, 'z' : 3} b = {'y': 2, 'z' : 4} from collections import ChainMap """ chainMap 接受多个字典并将它们在逻辑上变成一个字典。 然后,这些字典并不是真的合并在一起了。 ChainMap类只是在内部创建了一个容纳这些字典的列表 并重新定义了一些常见的字典操作来遍历这个列表。 如果出现重复键,那么第一次出现的映射值会被返回。 """ c = ChainMap(a, b) print (len(c)) # 3个key print (list(c.keys())) print (list(c.values()))
""" 如果要删除一个键, 则这个键必须出现在第一个map中 """ # del c['y'] 报错 print (list(c.keys()))
#创建一个空Map values = ChainMap() values['x'] = 1 print (values) #->ChainMap({'x': 1})
""" ChainMap 对于编程语言中的作用范围变量(比如 globals , locals 等) 是非常有用的 """ #创建一个新的空Map #将之前的ChainMap放在新建的列表后面 values = values.new_child() values['x'] = 2 print (values) #->ChainMap({'x': 2}, {'x': 1}) values = values.new_child() values['x' 4000 ] = 3 print (values) #->ChainMap({'x': 3}, {'x': 2}, {'x': 1}) print(list(values.values())) #-> 3 values = values.parents print (values) #->ChainMap({'x': 2}, {'x': 1})
""" update() 作为替代品 它需要你创建一个完全不同的字典对象(或者是破坏现有字典结 构)。 同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去 """ a = {'x': 1, 'z': 3 } b = {'y': 2, 'z': 4 } b.update(a) #{'z': 3, 'y': 2, 'x': 1} # 改变了b的结构 print (b) a['x'] = 11 # 对a的修改不会映射到b上 print(b)
四、关联知识
1. collection ChainMap <a href='#'>传输门,待补充</a>
五、总结
六、代码地址
github地址:https://github.com/weichen666/python_cookbook目录/文件:first_selection/learn_collections_chainmap.py
七、参考
相关文章推荐
- scrollview嵌套listview默认显示顶端方法
- HTTPS 简介及使用官方工具 Certbot 配置 SSL 安全证书详细教程
- 寻找最小的k个数
- inflate方法
- 西游就是一段投股史
- 寻找最小的k个数
- JavaScript “函数重载”
- java代码中变量属性值乱码问题!
- php上传图片至七牛
- Git教程学习(四)—版本控制
- 计算机的机器码
- dora源码分析及插件书写
- mysql新建表datetime类型字段不能设置当前默认时间解决方法
- 关于js跨域的一些问题
- WCF学习笔记——Address
- 算法提高 开灯游戏
- 人脸数据库汇总
- 关于SQL Server中的“数据库实例文件初始化”
- 点击图片或者鼠标划过切换样式的另一种写法
- 关于eclipse安装freemarker插件无效不能使用