隐藏页面特效

ChainMap合并字典

在python中,我们有两个字典需要合并的时候,可以使用字典的update方法

a = {'a': 1, 'b': 2} b = {'x': 3, 'y': 4} a.update(b) print(a)

问题:这个方法它会改变其中的一个字典。如果我们不想改变原有的两个字典,那么我们必须要单独再创建一个字典,但是如果原来的两个字典非常大的的话,那么这种方式将会浪费大量的内存。所以无论是直接修改原有的其中一个字典,还是创建一个新字典,这两种方案都有点缺陷。那么有没有既不修改原有字典,又不另外创建一个新的字典的方法呢?我们可以使用collections模块下面的ChainMap
ChainMap的使用

from collections import ChainMap a = {'a': 1, 'b': 2} b = {'x': 3, 'y': 4} c = ChainMap(a, b) print(c['a']) print(c['y'])

原理

ChainMap不会真的把字典合并在一起,而是在内部存储一个Key到每个字典的映射,当你读取c['a']的时候,它先去查询这个Key在哪个字典里面,然后再去对应的字典里面查询对应的值。所以使用ChainMap几乎不需要额外的内存空间(当前这个对象自己会占用一些空间,但是如果要合并大字典,那么它自己占用的空间几乎可以忽略不记)

问题

1.如果两个字典里面有一个Key的名字相同,那么使用ChainMap以后会读取哪一个 使用第一个拥有这个key的字典里面的值 2.如果为ChainMap对象添加一个Key-Value对,那么这个值会添加到哪里? 添加到第一个字典里面 3.如果从原字典里面删除一个KeyChainMap对象里面的Key也会消失吗? 会,只要修改了源字典里面的数据,对应的ChainMap里面的也会修改 4.如果从ChainMap对象里面删除一个Key,那么原字典里面的Key会消失吗? 如果这个Key只在一个源字典中存在,那么这个Key会被从源字典中删除。如果这个Key在多个字典中都存在,那么Key会被从第一个字典中删除。当被从第一个字典中删除以后,第二个源字典的Key可以继续被 ChainMap 读取。

__EOF__

本文作者404 Not Found
本文链接https://www.cnblogs.com/weiweivip666/p/14582924.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
posted @   我在路上回头看  阅读(68)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示