Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法

 更新时间:2018年04月19日 11:51:59   作者:垄上行  
这篇文章主要介绍了Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法,结合实例形式分析了Python字典映射合并操作相关实现技巧,需要的朋友可以参考下

本文实例讲述了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函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Pytorch之如何dropout避免过拟合

    Pytorch之如何dropout避免过拟合

    这篇文章主要介绍了Pytorch 如何dropout避免过拟合的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Python模拟百度登录实例详解

    Python模拟百度登录实例详解

    最近公司产品和百度贴吧合作搞活动,为了增加人气,打算做个自动签到的小程序,接下来通过本文给大家介绍python模拟百度登录,感兴趣的朋友一起学习本段代码吧
    2016-01-01
  • Python文本统计功能之西游记用字统计操作示例

    Python文本统计功能之西游记用字统计操作示例

    这篇文章主要介绍了Python文本统计功能之西游记用字统计操作,结合实例形式分析了Python文本读取、遍历、统计等相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Pytorch distributed 多卡并行载入模型操作

    Pytorch distributed 多卡并行载入模型操作

    这篇文章主要介绍了Pytorch distributed 多卡并行载入模型操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 使用Python画一张完整的K线图的方法教程

    使用Python画一张完整的K线图的方法教程

    Pyecharts 是 Python 里的一个强大可视化库,基于百度 Echarts,支持各种图表:柱状图、折线图、饼图、K 线图等等,本文就给大家介绍了Python如何使用Pyecharts画一个漂亮的K线图,感兴趣的小伙伴跟着小编一起来看看吧
    2025-04-04
  • 基于python3 类的属性、方法、封装、继承实例讲解

    基于python3 类的属性、方法、封装、继承实例讲解

    下面小编就为大家带来一篇基于python3 类的属性、方法、封装、继承实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python与Matlab实现快速傅里叶变化的区别

    Python与Matlab实现快速傅里叶变化的区别

    信号处理免不了要求频率、画频谱图,但Matlab的fft()函数与Python的numpy.fft.fft()与scipy.fftpack.fft()函数得到的是fft变化后的双边复数值,离画频谱图还有几句代码的距离。基本原理不介绍了,下面直接懒人投喂,给出Matlab与Python的两个函数,直接调用即可画频谱图
    2021-10-10
  • python轻量级性能工具-Locust详解

    python轻量级性能工具-Locust详解

    Locust基于python的协程机制,打破了线程进程的限制,可以能够在一台测试机上跑高并发,这篇文章主要介绍了python轻量级性能工具-Locust,需要的朋友可以参考下
    2023-05-05
  • 关于Pyinstaller打包eel和pygame需要注意的坑

    关于Pyinstaller打包eel和pygame需要注意的坑

    这篇文章主要介绍了关于Pyinstaller打包eel和pygame需要注意的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Pandas缺失值2种处理方式代码实例

    Pandas缺失值2种处理方式代码实例

    这篇文章主要介绍了Pandas缺失值2种处理方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论