1.20合并多个字典或者映射

2024-03-13 15:18
文章标签 多个 合并 字典 映射 1.20

本文主要是介绍1.20合并多个字典或者映射,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题

​ 现在很多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作。比如查找值或检查某些键是否存在。

解决方案

​ 假如你有如下两个字典:

a={'x':1,'z':3}
b={'y':2,'z':4}

​ 现在假设你必须在两个字典中执行查找元素操作(比如先a中找,如果找不到再b中找)。一个非常简单的解决方案就是使用collection模块中的ChainMap类。比如:

from collections import ChainMapc = ChainMap(a, b)
print(c['x'])  # ->1
print(c['y'])  # ->2
print(c['z'])  # ->3

讨论

​ 一个ChainMap 接受了多个字典并将它们在逻辑是上变成一个字典。然后,这些字典并不是真正的合并在一起了,ChainMap类只是在内部创建了一个容纳这些字典的列表并重新定义了一些常见的字典操作来遍历这个列表。大部分字典操作都是可以正常使用的的,比如:

print(len(c)) # ->3
print(c.keys()) # ->KeysView(ChainMap({'x': 1, 'z': 3}, {'y': 2, 'z': 4}))
print(list(c.values())) #->[2, 3, 1]

​ 如果出现重复键,那么第一次出现的映射值会被返回。因此,例子程序中的c[‘z’]总是会返回字典a中对应的值,而不是b中对应的值。

​ 对于字典的更新或删除操作总是影响的是列表中的第一个字典,比如:

c['z']=10
c['w']=40
del c['x']
print(a)  # ->{'z': 10, 'w': 40}
del c['y']  # ->KeyError: "Key not found in the first mapping: 'y'"

ChainMap 对于编程语言中的作用范围变量(比如globals,locals等)是非常有用的。事实上,有一些方法可以使它变得简单:

values=ChainMap()
values['x']=1
values=values.new_child()
values['x']=2
values=values.new_child()
values['x']=3
print(values)  # ->ChainMap({'x': 3}, {'x': 2}, {'x': 1})
values=values.parents
print(values['x'])  # ->2
values=values.parents
print(values['x'])  # ->1
print(values)  # ->ChainMap({'x': 1})

​ 作为ChainMap的替代,你可能会考虑使用update()方法将两个字典合并,比如:

a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}
merged=dict(b)
merged.update(a)
print(merged['x'])# ->1
print(merged['y'])# ->2
print(merged['z'])# ->3

​ 这样也能行得通,但是它需要你创建一个完全不同的字典对象(或者是被破坏现有字典结构)。同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去。比如:

a = {'x': 1, 'z': 3}
b = {'y': 2, 'z': 4}
merged=ChainMap(a,b)
print(merged['x'])   # ->1
a['x']=42
print(merged['x'])   #->42

这篇关于1.20合并多个字典或者映射的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805280

相关文章

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4