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 urllib、urllib2、httplib抓取网页代码实例
May 09 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
利用Python抓取行政区划码的方法
Nov 28 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
tensorflow 查看梯度方式
Feb 04 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
python urllib库的使用详解
Apr 13 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
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
Python将多个excel表格合并为一个表格
2021/02/22 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
利用python开发app实战的方法
2019/07/09 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
django中的数据库迁移的实现
2020/03/16 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Python通过len函数返回对象长度
2020/10/22 Python
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
编程实现去掉XML的重复结点
2014/05/28 面试题
大三预备党员入党思想汇报
2014/01/08 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
金融事务专业求职信
2014/04/25 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
2015年读书月活动总结
2015/03/26 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
P站美图推荐——变身女主角特辑
2022/03/20 日漫