Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法


Posted in Python onApril 19, 2018

本文实例讲述了Python将多个映射合并为单个映射的方法。分享给大家供大家参考,具体如下:

问题:在逻辑上将多个字典或映射合并为一个单独的映射结构,以此执行某些特定的操作,比如查找值或者检查键是否存在

解决方案:利用collections模块中的ChainMap

ChainMap可接受多个映射然后在逻辑上使它们表现为一个单独的映射结构。这些映射在字面上并不会合并在一起。相反,ChainMap只是简单地维护一个记录底层映射关系的列表,然后重定义常见的字典操作来扫描这个列表。

# example.py
#
# Example of combining dicts into a chainmap
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
# (a) Simple example of combining
from collections import ChainMap
c = ChainMap(a,b) #如果有重复的键,那么会采用第一个映射中所对应的值。
print(c['x'])   # Outputs 1 (from a)
print(c['y'])   # Outputs 2 (from b)
print(c['z'])   # Outputs 3 (from a)
# Output some common values
print('len(c):', len(c))
print('c.keys():', list(c.keys()))
print('c.values():', list(c.values()))
# Modify some values
c['z'] = 10
c['w'] = 40
print("a:", a)
del c['x']
print("a:", a)
# Example of stacking mappings (like scopes)
values = ChainMap()
values['x'] = 1
# Add a new mapping
values = values.new_child()
values['x'] = 2
# Add a new mapping
values = values.new_child()
values['x'] = 3
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])
# Discard last mapping
values = values.parents
print(values)
print(values['x'])
>>> ================================ RESTART ================================
>>>
1
2
3
len(c): 3
c.keys(): ['y', 'x', 'z']
c.values(): [2, 1, 3]
a: {'x': 1, 'z': 10, 'w': 40}
a: {'z': 10, 'w': 40}
ChainMap({'x': 3}, {'x': 2}, {'x': 1})
3
ChainMap({'x': 2}, {'x': 1})
2
ChainMap({'x': 1})
1
>>>

另外ChainMap操作的是原始字典,可以避免一些令人不悦的行为,例如其中任何一个原始字典的修改无法反应到合并后的字典中。

>>> a={'x':1,'z':3}
>>> b={'y':2,'z':4}
>>> merged=ChainMap(a,b)
>>> merged
ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4})
>>> merged['x']
1
>>> a['x']=55
>>> merged['x']
55
>>> merged
ChainMap({'x': 55, 'z': 3}, {'y': 2, 'z': 4})
>>>

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
Jul 06 Python
Python如何解除一个装饰器
Aug 07 Python
python 将html转换为pdf的几种方法
Dec 29 Python
python爬取某网站原图作为壁纸
Jun 02 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 #Python
一篇文章读懂Python赋值与拷贝
Apr 19 #Python
PyQt5每天必学之布局管理
Apr 19 #Python
PyQt5每天必学之创建窗口居中效果
Apr 19 #Python
PyQt5每天必学之弹出消息框
Apr 19 #Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 #Python
PyQt5每天必学之关闭窗口
Apr 19 #Python
You might like
swfupload 多文件上传实现代码
2008/08/27 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
js 作用域和变量详解
2017/02/16 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
大学生表扬信范文
2014/01/09 职场文书
同学聚会老师邀请函
2014/01/28 职场文书
军人违纪检讨书
2014/02/04 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
法人身份证明书
2014/10/08 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
python b站视频下载的五种版本
2021/05/27 Python
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python