collections.ChainMap类合并字典或映射
## 使用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类合并字典或映射的更多相关文章
- [PY3]——合并多个字典或映射(collections模块中的ChainMap 类)
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 使用 collections 模块中的 ChainMap 类 Cha ...
- python之合并多个字典或映射
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 假如你有如下两个字典: a = {'x': 1, 'z': 3} b ...
- 【python cookbook】【数据结构与算法】20.将多个映射合并为单个映射
问题:在逻辑上将多个字典或映射合并为一个单独的映射结构,以此执行某些特定的操作,比如查找值或者检查键是否存在 解决方案:利用collections模块中的ChainMap类 ChainMap可接受多个 ...
- deque/defaultdict/orderedict/collections.namedtuple()/collections.ChainMap() 笔记
关于deque的使用 collections.deque([list[, max_length]]) # 不限定长度,可随意添加没有上限 >>> from collections i ...
- [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法
问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...
- collections.Counter类统计列表元素出现次数
# 使用collections.Counter类统计列表元素出现次数 from collections import Counter names = ["Stanley", &qu ...
- Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌
1.Map集合概述和特点 * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多 ...
- day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)
Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类 实现了 set接口 唯一 ...
- TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...
随机推荐
- Postfix的工作原理
传统的Sendmail将所有功能都集中在同一个程序里,这种结构我们称之为“单体式设计”(monolithic).Postfix采用专职负责的策略,不同的功能分别交由不同的专门程序处理,这种结构称为“模 ...
- collectd的python插件(redis)
https://blog.dbrgn.ch/2017/3/10/write-a-collectd-python-plugin/ redis_info.conf <LoadPlugin pytho ...
- 【Leetcode】【Medium】Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- Linux 服务器性能问题排查思路
一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当你的程序非正常工作的时候, ...
- 正则表达式 (python)
正则表达式 在正则表达式中,如果直接给出字符,就是精确匹配. 用\d可以匹配一个数字,\w可以匹配一个字母或数字,所以: '00\d'可以匹配'007',但无法匹配'00A': '\d\d\d'可以匹 ...
- python 生成器&迭代器
列表生成式 要生成[1x1, 2x2, 3x3, ..., 10x10]>>> [x * x for x in range(1, 11)]for循环后面还可以加上if判断>&g ...
- myeclipse 复制项目不包含svn或CVS目录
目前只记录到2个方法:(SVN和CVS都适用) 方法一:导出法 1.右击需要cp的目录,点击export,General/File System 2.next 3.确认你选择的目录,并勾选:Creat ...
- SpringMVC 如何定义类型转换器
举例说明, 将一个字符串转换成的 User 类型. 例如将字符串 1-zcd-1234-zcd@163.com-1999/12/12 转换成User 类型. 一.实体类 public class U ...
- web.xml中Listener的作用
Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应 ...
- Win32线程——优先权
<Win32多线程程序设计>–Jim Beveridge & Robert Wiener Win32 优先权是以数值表现的,并以进程的“优先权类别(priority class)” ...