## 使用update()方法或者ChainMap类合并字典或映射

 # 使用update()方法合并

 a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}
merged = dict(b) # 创建一个新字典
print(merged)
# {'y': 2, 'z': 4}
merged.update(a) # 更新字典数据(合并)
print(merged)
# {'y': 2, 'z': 3, 'x': 1} a['x'] = 10 # 对原有字典的改变不会影响合并后的字典
print(merged)
# {'y': 2, 'z': 3, 'x': 1} # 使用collections.ChainMap()类
from collections import ChainMap a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}
c = ChainMap(a, b)
print(c)
# ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4}) # 数据的读取总是从第一个字典开始查找,找不到再从第二个中查找
print(c['x'])
#
print(c['y'])
#
print(c['z'])
# # 数据的增加或者删除操作总是针对第一个字典
c['w'] = 4
print(c)
# ChainMap({'x': 1, 'z': 3, 'w': 4}, {'y': 2, 'z': 4}) del c['w']
print(c)
# ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4}) del c['y'] # 无法删除第二个字典中的键值对
# KeyError: 'y'
# KeyError: "Key not found in the first mapping: 'y'" # 对原有字典的操作会影响合并的字典
a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}
c = ChainMap(a, b)
print(c)
# ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
print(c['x'])
#
print(c['y'])
#
print(c['z'])
# a['x'] = 5 # 修改原有字典的值
print(c['x']) # 合并的字典受到影响
# # ChainMap()对象支持大多数字典的操作
print(len(c))
#
print(list(c.keys()))
# ['x', 'y', 'z']
print(list(c.values()))
# [5, 2, 3] # 添加或删除新的字典
values = ChainMap()
values['x'] = 1
values = values.new_child() # 添加一个空白字典
print(values)
# ChainMap({}, {'x': 1})
values['x'] = 2 # 给空白字典添加内容
print(values)
# ChainMap({'x': 2}, {'x': 1})
values = values.new_child()
values['x'] = 3
print(values)
# ChainMap({'x': 3}, {'x': 2}, {'x': 1}) # 删除第一个字典
values = values.parents
print(values)
# ChainMap({'x': 2}, {'x': 1})
values = values.parents
print(values)
# ChainMap({'x': 1})

参考资料:
  Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).

collections.ChainMap类合并字典或映射的更多相关文章

  1. [PY3]——合并多个字典或映射(collections模块中的ChainMap 类)

    问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 使用 collections 模块中的 ChainMap 类 Cha ...

  2. python之合并多个字典或映射

    问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 假如你有如下两个字典: a = {'x': 1, 'z': 3} b ...

  3. 【python cookbook】【数据结构与算法】20.将多个映射合并为单个映射

    问题:在逻辑上将多个字典或映射合并为一个单独的映射结构,以此执行某些特定的操作,比如查找值或者检查键是否存在 解决方案:利用collections模块中的ChainMap类 ChainMap可接受多个 ...

  4. deque/defaultdict/orderedict/collections.namedtuple()/collections.ChainMap() 笔记

    关于deque的使用 collections.deque([list[, max_length]]) # 不限定长度,可随意添加没有上限 >>> from collections i ...

  5. [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  6. collections.Counter类统计列表元素出现次数

    # 使用collections.Counter类统计列表元素出现次数 from collections import Counter names = ["Stanley", &qu ...

  7. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  8. day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

    Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一 ...

  9. TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

    TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...

随机推荐

  1. 用opencv做的静态图片人脸识别

    这次给大家分享一个图像识别方面的小项目,主要功能是识别图像中的人脸并根据人脸在图片库找出同一个与它最相似的图片,也就是辨别不同的人. 环境:VS2013+opencv2.4.13 主要是算法:open ...

  2. spring-wind 搭建过程问题记录

    最近想搭一个 shiro+ssm的快速开发框架,用于后台管理以及微信公众号的开发.后台主要是权限管理,于是选择有spring+shiro,微信公众号的前端页面搜了下有用velocity开发的,刚好看到 ...

  3. SQL删除多列语句的写法

    SQL删除表中多个列的写法: ALTER TABLE table_name DROP COLUMN COLUMN1,COLUMN COLUMN2,COLUMN COLUMN3 ……

  4. DedeCms织梦后台管理员密码修改和忘记重置方法

    方法/步骤 打开dede_admin数据表: 进入你的MYSQL后台,然后在你的数据库名中,找到dede_admin这项如图,pwd下的值就是你的密码,织梦密码采取的是MD5加密,破解麻烦而且没有必要 ...

  5. July 18th 2017 Week 29th Tuesday

    My heart is stronger now that you are in it. 我的心里有了你,从此变得更强大. You will no longer feel lonely if ther ...

  6. February 9 2017 Week 6 Thursday

    Happy life lies in a peaceful mind. 幸福的生活存在于心绪的宁静当中. What can be seen as happy life? Maybe the answe ...

  7. ZT sem_init sem_wait sem_post sem_destroy

    sem_init() 2009-06-26 16:43:11|  分类: linux |字号 订阅       信号量的数据类型为结构sem_t,它本质上是一个长整型的数.函数sem_init()用来 ...

  8. 如何在SAP C4C里使用ABSL消费第三方Restful API

    首先我们得有一个可以正常工作的Restful API: 然后在Cloud for Customer的Cloud Application Studio里创建Restful API的模型,把第一步可以正常 ...

  9. Maven项目打包jar依赖外部jar

    有时候我们想要做一些java 的小程序,需要把打包成jar,单独执行,做一个maven项目,maven非常方便,有自动打包成jar的插件,但是有时候我们的项目可能会依赖其他的jar包,所以非常麻烦. ...

  10. BZOJ5293:[BJOI2018]求和(LCA,差分)

    Description master 对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k  次方和,而且每次的k 可能是不同的.此处节点深度的定义是这个节点 ...