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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
解决Python中回文数和质数的问题
Nov 24 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
深入了解python列表(LIST)
Jun 08 Python
Python 存取npy格式数据实例
Jul 01 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
什么是Python装饰器?如何定义和使用?
Apr 11 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检测网页是否被百度收录的函数代码
2013/10/09 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
详解JS中的attribute属性
2017/04/25 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
python定时器(Timer)用法简单实例
2015/06/04 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Python PO设计模式的具体使用
2019/08/16 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
区优秀教师事迹材料
2014/02/10 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
优秀教师先进材料
2014/12/16 职场文书
工作检讨书范文
2015/01/23 职场文书
勇敢的心观后感
2015/06/09 职场文书
植物园观后感
2015/06/11 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android