## 使用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. 第三方库 jsoncpp 读写json

    一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传 ...

  2. 通过JavaScript创建Qml对象

    有两种方法可以创建,都是全局对象Qt提供的方法 一:用Qt.createComponent加载一个qml文件并创建Component 二:用Qt.createQmlObject从一个qml字符串创建C ...

  3. jq重复切换类名

    //重复切换类名"active"$(".probability-rules header").toggleClass("active");

  4. Dubbo框架介绍与安装 Dubbo 注册中心(Zookeeper-3.4.6)

    背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. • 单一应用架构 • 当网站流量很小时, ...

  5. MQ测试

    2015年8月13日23:14:52 测试RabbitMq ====================== 千兆局域网:send ≍10000/s  receive ≍7000/s 百兆局域网:send ...

  6. angular2 ng build --prod 报错:Module not found: Error: Can't resolve './$$_gendir/app/app.module.ngfactory'

    调试页面 ng serve 正常 ng build 也正常 ng build --prod 异常:Module not found: Error: Can't resolve './$$_gendir ...

  7. RunDll32.exe 详解及[Windows批处理]清除IE缓存

    Rundll32命令详解 文件作用:执行32位DLL文件中的内部函数 位置:X:(当前系统分区)\windows\system32 命令语法: Rundll32.exe DLLname,Functio ...

  8. JS获取URL中参数值的4种方法

    方法一:正则法 function getQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(& ...

  9. js中公有方法、特权方法、静态方法

    1.公有属性和公有方法 1 2 3 4 5 6 7 8 9 function User(name,age){   this.name = name;//公有属性   this.age = age; } ...

  10. 取多个name值相同的input里面的值

    html 中是允许多个具有相同name属性的元素的,例如服务器端读取的常规做法是: string name = Request.Params["txtName"]; 得到的将是一串 ...