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程序设计有所帮助。

相关文章

  • pydev使用wxpython找不到路径的解决方法

    pydev使用wxpython找不到路径的解决方法

    pydev使用wx库开发的过程中,import时碰到wx可以识别,但是其它很多函数和变量上面全部是红叉,即无法识别
    2013-02-02
  • Python Pytorch深度学习之神经网络

    Python Pytorch深度学习之神经网络

    今天小编就为大家分享一篇关于Pytorch神经网络的文章,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-10-10
  • WIn10+Anaconda环境下安装PyTorch(避坑指南)

    WIn10+Anaconda环境下安装PyTorch(避坑指南)

    这篇文章主要介绍了WIn10+Anaconda环境下安装PyTorch(避坑指南),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Python使用sorted排序的方法小结

    Python使用sorted排序的方法小结

    这篇文章主要介绍了Python使用sorted排序的方法,结合三个实例分析了Python使用sorted方法进行元素排序操作的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • Python使用PymuPDF处理PDF文件的操作详解

    Python使用PymuPDF处理PDF文件的操作详解

    Python 中的 PymuPDF 是一个强大的库,可以让你轻松地处理 PDF 文件,本文将深入探讨 PymuPDF 的用法,包括打开、读取、修改和创建 PDF 文件,以及文本提取和页面操作,感兴趣的朋友可以参考下
    2023-12-12
  • 一篇文章带你了解几个好用的Python技巧

    一篇文章带你了解几个好用的Python技巧

    这篇文章主要介绍了几个Python小技巧,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10
  • Python中匹配模糊的字符串问题分析

    Python中匹配模糊的字符串问题分析

    这篇文章主要介绍了Python中匹配模糊的字符串的过程,我们将学习如何使用process 模块,该模块允许我们在模糊字符串逻辑的帮助下有效地匹配或提取字符串,需要的朋友可以参考下
    2023-09-09
  • Python中的json对象与string相互转换教程

    Python中的json对象与string相互转换教程

    python里有json这个库,但并没有json这个类,所以所谓的json对象本质上就是一个dict;而json这个库,用于实现dict到string、string到dict的互转,这篇文章主要介绍了Python中的json对象与string相互转换教程,需要的朋友可以参考下
    2022-11-11
  • 详解Python中元组的三个不常用特性

    详解Python中元组的三个不常用特性

    元组是Python中一种重要的内置数据类型。与列表一样,我们经常使用元组将多个对象保存为相应的数据容器。本文为大家总结了元组的三个不常用特性,感兴趣的小伙伴可以了解一下
    2022-07-07
  • Django中session登录验证操作指南

    Django中session登录验证操作指南

    本文介绍了如何使用Django中的session登录验证来保护网站的安全性。在此过程中,我们首先介绍了Django的认证架构和基本概念,然后我们深入探讨了如何使用session实现登录验证功能。最后,我们解释了如何创建一个Custom User Model,以及如何使用它来自定义用户对象。
    2023-04-04

最新评论