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实现异步回调机制代码分享
Jan 10 Python
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
浅谈Python中数据解析
May 05 Python
简单介绍Python中的几种数据类型
Jan 02 Python
python 将json数据提取转化为txt的方法
Oct 26 Python
selenium+python环境配置教程详解
May 28 Python
win10安装python3.6的常见问题
Jul 01 Python
基于python实现生成指定大小txt文档
Jul 20 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
Python类型转换的魔术方法详解
Dec 23 Python
python开发制作好看的时钟效果
May 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
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
js对字符的验证方法汇总
2015/02/04 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
js实现分页功能
2017/05/24 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
用Vue编写抽象组件的方法
2019/05/06 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
大二学期个人自我评价
2014/01/13 职场文书
公务员综合考察材料
2014/02/01 职场文书
施工工地安全标语
2014/06/07 职场文书
学习十八大的心得体会
2014/09/01 职场文书
运动会加油稿20字
2014/11/15 职场文书
不同意离婚代理词
2015/05/23 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
公司酒会致辞
2015/07/30 职场文书
调研报告的主要写法
2019/04/18 职场文书
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
Elasticsearch 批量操作
2022/04/19 Python
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS