这期内容当中小编将会给大家带来有关如何在Python中使用ChainMap模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
Python主要应用领域有哪些
1,云计算,典型应用OpenStack.2,网前端开发,众多大型网站均为Python开发。3。人工智能应用,基于大数据分析和深度学习而发展出来的人工智能本质上已经无法离开python.4,系统运维工程项目,自动化运维的标配就是python + Django/flask.5,金融理财分析,量化交易,金融分析。6,大数据分析。
在python中,当我们有两个字典需要合并的时候,可以使用字典的<代码> 代码>更新方法,例如:
a =,{& # 39;一个# 39;,,1,,& # 39;b # 39;:, 2} b =, {& # 39; x # 39;:, 3, & # 39; y # 39;:, 4} a.update (b) print ()
运行效果如下图所示:
<人物> 图>
然而,这个方法有一个问题——它会改变其中一个字典。如果我们不想改变原有的两个字典,那么我们必需要单独再创建一个字典:
a =,{& # 39;一个# 39;,,1,,& # 39;b # 39;:, 2} b =, {& # 39; x # 39;:, 3, & # 39; y # 39;:, 4} 时间=c dict (a) c.update (b) 打印(c) print ()<人物> 图>
如果原来的两个字典非常大,那么这种方式将会浪费大量的内存。
无论是直接修改原有的其中一个字典,还是创建另一个字典,这两种方案都有点缺陷。那么有没有既不修改原有字典,又不另外创建一个新的字典的方法呢?
答案就是<代码> 代码>集合模块下面的<代码> ChainMap> 代码。
使用<代码> ChainMap> 代码可以把多个字典合并成一个<代码> ChainMap> 代码对象读。写这个对象就像是读字典一样。
例如:
得到collections import ChainMap a =,{& # 39;一个# 39;,,1,,& # 39;b # 39;:, 2} b =, {& # 39; x # 39;:, 3, & # 39; y # 39;:, 4} 时间=c ChainMap (a, b) 打印(c[& # 39;一个# 39;]) 打印(c [& # 39; y # 39;])
运行效果如下图所示:
<人物> 图>
不仅可以“合并”两个字典,<代码> ChainMap> 代码可以接受任意多个字典,并把他们全都合在一起:
得到collections import ChainMap a =,{& # 39;一个# 39;,,1,,& # 39;b # 39;:, 2} b =, {& # 39; x # 39;:, 3, & # 39; y # 39;:, 4} c =, {& # 39; z # 39;:, 5日,& # 39;w # 39;:, 6} d =,{& # 39;猴# 39;:,7日,& # 39;h # 39;:, 8日,& # 39;k # 39;:, 9} e =, ChainMap (a, b, c, d) print(e['a'], e['y'], e['z'], e['k'])
运行效果如下图所示:
ChainMap
不会真的把字典合并在一起,而是在内部储存一个Key到每个字典的映射,当你读取 e[key]
的时候,它先去查询这个key在哪个字典里面,然后再去对应的字典里面查询对应的值。所以使用ChainMap几乎不需要额外的内存空间(当前这个对象自己会占用一些空间,但是如果要合并大字典,那么它自己占用的空间几乎可以忽略)。
所以你是不是觉得使用 ChainMap
就能实现完美合并字典了呢?
在使用它之前,你一定要理解它的运行原理。如果你理解了它的运行原理,那么下面几个问题,你在运行代码之前就会知道结果是什么:
如果两个字典里面有一个Key的名字相同,那么使用ChainMap以后会读取哪一个? 如果为ChainMap对象添加一个Key-Value对,那么这个值会添加到哪里? 如果从原字典里面删除一个Key,ChainMap对象里面的Key也会消失吗? 如果从ChainMap对象里面删除一个Key,那么原字典里面的Key会消失吗?
首先来说第一个问题的答案:
ChainMap
对象会使用第一个拥有这个Key的字典里面的值,如下图所示: