Python实现字典序列ChainMap

yizhihongxing

Python的ChainMap类是一个非常有用的数据结构,可以让多个字典按照顺序合并成为一个字典,可以在这个新字典中进行键值查找和修改操作。简单来说,ChainMap会按照顺序查找多个字典,并返回最先找到的键值对。

具体步骤如下:

  1. 导入ChainMap类
from collections import ChainMap
  1. 创建多个字典
dict_1 = {'a':1,'b':2}
dict_2 = {'b':3,'d':4}
dict_3 = {'e':5}
  1. 使用ChainMap类创建新字典
new_dict = ChainMap(dict_1, dict_2, dict_3)

新字典new_dict中,dict_1排在最前面,所以new_dict['a']返回1。如果a不在dict_1中,则会依次在后续字典中查找,直到找到为止。同理,如果a在所有字典中都不存在,则会抛出KeyError异常。

下面以两条示例说明:

例1:使用ChainMap类,将两个字典合并为一个,然后按照值进行排序。

from collections import ChainMap

dict_1 = {'a': 3, 'b': 5, 'c': 6}
dict_2 = {'d': 2, 'e': 1, 'f': 9}

new_dict = ChainMap(dict_1, dict_2)
sorted_dict = {k: v for k, v in sorted(new_dict.items(), key=lambda item: item[1])}

print(sorted_dict)
# {'e': 1, 'd': 2, 'a': 3, 'b': 5, 'c': 6, 'f': 9}

首先创建了两个字典dict_1dict_2,然后使用ChainMap类将其合并为一个新字典new_dict。最后使用sorted()函数按照字典值排序,生成了一个新字典sorted_dict

例2:使用ChainMap类,可以通过新建字典并更新的方式对多个字典进行修改。

from collections import ChainMap

dict_1 = {'a': 1, 'b': 2, 'c': 3}
dict_2 = {'b': 4, 'c': 6, 'd': 7}
dict_3 = {'b': 5}

new_dict = ChainMap(dict_1, dict_2, dict_3)
print(new_dict)
# ChainMap({'a': 1, 'b': 2, 'c': 3}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})

new_dict = new_dict.new_child({'b': 8, 'e': 9})
print(new_dict)
# ChainMap({'a': 1, 'b': 8, 'c': 3, 'e': 9}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})

new_dict['b'] = 10
print(new_dict)
# ChainMap({'a': 1, 'b': 10, 'c': 3, 'e': 9}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})

dict_1['b'] = 11
print(new_dict)
# ChainMap({'a': 1, 'b': 10, 'c': 3, 'e': 9}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})

首先创建了三个字典dict_1、dict_2、dict_3,然后使用ChainMap类将其合并为一个新字典new_dict。接着新建一个子字典,修改be的键值并加入到新字典中,使用new_child()方法将其添加到原有字典中。可以看到,在新字典中b的值被修改为8

然后对新字典中的b键进行了修改,将其赋值为10,可以看到修改成功。接着修改了原有字典dict_1中的b键,但是new_dict中的b键并没有得到改变,因为其已经存在于新字典中了。

总的来说,使用ChainMap类可以方便地进行多个字典的合并和查找,支持修改操作,使得字典操作更加便捷。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现字典序列ChainMap - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • python方向键控制上下左右代码

    下面是详细讲解“Python方向键控制上下左右代码”的完整攻略。 概述 我们可以使用Python编写代码来让方向键控制上下左右。具体来说,我们可以使用curses库来捕获键盘输入,并根据输入来移动光标。 安装 curses 库 首先,我们需要安装curses库。在终端中运行以下命令: sudo apt-get install libncurses5-dev …

    python 2023年5月20日
    00
  • 关于Python的高级数据结构与算法

    下面是关于“Python的高级数据结构与算法”的完整攻略。 1. 高级数据结构 1.1 堆 堆是一种特殊的树形数据结构,它满足堆的性质对于每个节点x,它的父节点的值小于等于x的值。在Python中,我们可以使用heapq模块来实现。 import heapq # 创建一个堆 my_heap = [] heapq.heappush(my_heap, 3) he…

    python 2023年5月13日
    00
  • OpenCV-Python实现轮廓检测实例分析

    下面我将详细讲解“OpenCV-Python实现轮廓检测实例分析”的完整攻略。 一、简介 在图像处理中,轮廓是一组表示物体边界的点。在OpenCV中,轮廓可以使用findContours函数来获取。本文就是通过OpenCV-Python实现轮廓检测实例分析。 二、轮廓获取 要获取图像中的轮廓,可以通过以下步骤实现: 二值化图像。可以使用阈值函数或Canny边…

    python 2023年5月18日
    00
  • 详解Python如何生成词云的方法

    下面是详解Python如何生成词云的方法的完整攻略。 1. 安装和导入必要的Python库 在使用Python生成词云之前,我们需要先安装和导入必要的Python库,其中最主要的是wordcloud库和matplotlib库。安装可以通过pip命令进行,具体方法如下: pip install wordcloud matplotlib 导入wordcloud和…

    python 2023年5月31日
    00
  • Python高级编程之继承问题详解(super与mro)

    Python高级编程之继承问题详解(super与mro) 继承的重要性 在面向对象编程中,我们经常需要重用已有的代码。继承是以一个已有类为基础,创建新类的一种方式。新类会自动获得基础类的所有属性和方法,而无需重新编写。 继承中的问题 在Python中,继承有很多种方式,但不同的方式也会有不同的问题。在本文中,我们主要讨论两种常见的问题:继承冲突以及父类构造函…

    python 2023年5月13日
    00
  • Python中的自定义函数学习笔记

    下面是关于“Python中的自定义函数学习笔记”的完整攻略。 基本概念 在Python中,函数是可复用的代码块。它们允许我们将一段代码作为单独的、独立的实体来组织和使用。Python可以使用内置函数,但我们也可以通过自定义函数来实现更加灵活的功能。 函数以def关键字开始,后面跟着函数名和一组括号,可以有参数和返回值。函数定义必须以冒号“:”结尾,并缩进代码…

    python 2023年6月5日
    00
  • Python requests发送post请求的一些疑点

    以下是关于Python requests发送POST请求的一些疑点的攻略: Python requests发送POST请求的一些疑点 在使用Python requests发送POST请求时,可能会遇到一些疑点。以下是Python requests发送POST请求的一些疑点的攻略。 POST请求的请求体 在发送POST请求时,需要设置请求体。以下是设置POST…

    python 2023年5月14日
    00
  • python添加模块搜索路径方法

    添加模块搜索路径是在Python中很常见的操作,可以让我们很方便地引用自己编写的模块或第三方模块。 下面介绍两种添加模块搜索路径的方法: 方法一:sys.path.append() 在Python中,我们可以使用sys.path来查看当前Python解释器的所有模块搜索路径。我们可以使用sys.path.append()方法来添加自己的模块搜索路径。 imp…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部