文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python ChainMap怎么使用

2023-07-05 08:42

关注

本文小编为大家详细介绍“python ChainMap怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python ChainMap怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

链接字典

chainMap是逻辑上合并两个字典为一个逻辑单元,合并后的结构实际上是一个列表,只是逻辑上是仍然为一个字典(并未生成新的),对此列表的操作模拟了各种字典的操作。合并后的取值及操作仍然是对原始字典的操作。

相同的key值合并后取第一个字典里的值作为重复key的值,

from collections import ChainMap dict1={"x":1,"y":3,"t":12}dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2)#相同的key值合并后取第一个dict里的值作为重复key的值print(chain_dict["x"])print(chain_dict["z"])

结果:

1
3

对chain_dict的增删改查影响的都是第一个字典

from collections import ChainMap dict1={"x":1,"y":3,"t":12}dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2)#对chain_dict的增删改查影响的都是dict1chain_dict["a"]=10print(dict1)chain_dict["x"]=100print(dict1)del dict1["t"]print(dict1)print(dict2)

 结果:

{'x': 1, 'y': 3, 't': 12, 'a': 10}
{'x': 100, 'y': 3, 't': 12, 'a': 10}
{'x': 100, 'y': 3, 'a': 10}
{'x': 5, 'z': 3}

maps属性可输出所以合并的字典

from collections import ChainMapdict1={"x":1,"y":3,"t":12}dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2)print(chain_dict.maps)

结果:

[{'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]

new_child()方法是在合并后的映射列表头部位置插入空映射{}

from collections import ChainMapdict1={"x":1,"y":3,"t":12}dict2={"x":5,"z":3} chain_dict=ChainMap(dict1,dict2)print(chain_dict.maps)a=chain_dict.new_child()print(a)print(a.maps)

结果:

[{'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
ChainMap({}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3})
[{}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]

new_child()可以衍生出parent()方法的使用,parent()其实是在合并后的映射列表去掉头部位置第一个映射后的结果:

from collections import ChainMapdict1={"x":1,"y":3,"t":12}dict2={"x":5,"z":3}chain_dict=ChainMap(dict1,dict2)print(chain_dict.maps)a=chain_dict.new_child()print(a)print(a.maps)b=a.parentsprint("b=",b)bb=b.parentsprint("bb=",bb)

结果:

[{'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
ChainMap({}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3})
[{}, {'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3}]
b= ChainMap({'x': 1, 'y': 3, 't': 12}, {'x': 5, 'z': 3})
bb= ChainMap({'x': 5, 'z': 3})

链接字典的应用:

链接字典及它的new_child和parent方法特性适合处理作用域及查找链类似问题:

1,查找链

import builtinspylookup = ChainMap(locals(), globals(), vars(builtins))

2,作用域

比如用户指定的命令行参数优先于环境变量的示例,而环境变量优先于默认值:

import os, argparse defaults = {'color': 'red', 'user': 'guest'} parser = argparse.ArgumentParser()parser.add_argument('-u', '--user')parser.add_argument('-c', '--color')namespace = parser.parse_args()command_line_args = {k:v for k, v in vars(namespace).items() if v} combined = ChainMap(command_line_args, os.environ, defaults)print(combined['color'])print(combined['user'])

读到这里,这篇“python ChainMap怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯