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小程序分享
Dec 05 Python
Python实现的个人所得税计算器示例
Jun 01 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
Python random库使用方法及异常处理方案
Mar 02 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
python requests模块的使用示例
Apr 07 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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中文分词的简单实现代码分享
2011/07/17 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
jQuery验证表单格式的使用方法
2017/01/10 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
Python判断直线和矩形是否相交的方法
2015/07/14 Python
不可错过的十本Python好书
2017/07/06 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
使用Python处理BAM的方法
2018/09/28 Python
python实现字符串和字典的转换
2018/09/29 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
200行python代码实现2048游戏
2019/07/17 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
中专毕业生自我鉴定范文
2013/11/09 职场文书
环境工程专业个人求职信
2013/12/05 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
企业文化建设实施方案
2014/03/22 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
初一年级组工作总结
2015/08/12 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang