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运算符重载用法实例
May 28 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
Jan 07 Python
python读取文件名称生成list的方法
Apr 27 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
python实现五子棋小游戏
Mar 25 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
Python colormap库的安装和使用详情
Oct 06 Python
用Python实现Newton插值法
Apr 17 Python
pandas DataFrame.shift()函数的具体使用
May 24 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
深入PHP FTP类的详解
2013/06/13 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
TensorFlow数据输入的方法示例
2018/06/19 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
关于幼儿的自我评价
2013/12/18 职场文书
班班通校本培训方案
2014/03/12 职场文书
农林环境专业求职信
2014/03/13 职场文书
我爱读书演讲稿
2014/05/07 职场文书
党的群众路线学习材料
2014/05/16 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
创业的9条正确思考方式
2019/08/26 职场文书