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编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
整理Python最基本的操作字典的方法
Apr 24 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
如何教少儿学习Python编程
Jul 10 Python
python神经网络 使用Keras构建RNN训练
May 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
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
jquery CSS选择器笔记
2010/03/29 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
Python实现远程调用MetaSploit的方法
2014/08/22 Python
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
如何在python中实现随机选择
2019/11/02 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
护士求职推荐信范文
2013/11/23 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
初婚初育证明范本
2014/11/24 职场文书
整脏治乱工作简报
2015/07/21 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server