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 22 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
python enumerate函数的使用方法总结
Nov 15 Python
对python 命令的-u参数详解
Dec 03 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
python画图的函数用法以及技巧
Jun 28 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
使用Python FastAPI构建Web服务的实现
Jun 08 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Python decimal模块使用方法详解
Jun 08 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
如何用Python搭建gRPC服务
Jun 30 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判断数据库中的记录是否存在的方法
2014/11/14 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
jquery 图片上传按比例预览插件集合
2011/05/28 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
python实现多进程代码示例
2018/10/31 Python
Django模板Templates使用方法详解
2019/07/19 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
应届生自我鉴定
2013/12/11 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
生产厂长岗位职责
2014/02/21 职场文书
2015年电教工作总结
2015/05/26 职场文书
焦裕禄观后感
2015/06/03 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android