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处理文本文件并生成指定格式的文件
Jul 31 Python
Cpy和Python的效率对比
Mar 20 Python
详解Django框架中的视图级缓存
Jul 23 Python
Python 操作MySQL详解及实例
Apr 30 Python
Python利用openpyxl库遍历Sheet的实例
May 03 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
Python中修改字符串的四种方法
Nov 02 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
python 提取文件指定列的方法示例
Aug 07 Python
Python延迟绑定问题原理及解决方案
Aug 04 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二分法在IP地址查询中的应用
2008/08/12 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
jQuery 操作XML入门
2008/12/25 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
js给selected添加options的方法
2015/05/06 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
js实现密码强度检验
2017/01/15 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
4s客服专员岗位职责
2013/12/01 职场文书
倡议书格式模板
2014/05/13 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
财政局个人总结
2015/03/04 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
中学教师读书笔记
2015/07/01 职场文书
五年级作文之想象作文
2019/10/30 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书