• 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.如果从原字典里面删除一个Key,ChainMap对象里面的Key也会消失吗?
    会,只要修改了源字典里面的数据,对应的ChainMap里面的也会修改
    4.如果从ChainMap对象里面删除一个Key,那么原字典里面的Key会消失吗?
    如果这个Key只在一个源字典中存在,那么这个Key会被从源字典中删除。如果这个Key在多个字典中都存在,那么Key会被从第一个字典中删除。当被从第一个字典中删除以后,第二个源字典的Key可以继续被 ChainMap 读取。
    

    -------------------------------------------

    个性签名:代码过万,键盘敲烂!!!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    烟大课表PC端-不仅仅是浏览器和手机APP
    关于51单片机电子时钟精度的问题
    第十二周项目4-点、圆的关系
    Git on Windows 一些问题
    vi 的使用
    Git 账户认证的一些问题
    [Windows] win7 配置Java开发环境
    Velocity 局部定制模板
    [Storm] Storm与asm的恩恩怨怨
    [Storm] No data flows into bolt
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/14582924.html
Copyright © 2020-2023  润新知