当前位置:首页 > 科技  > 软件

Python字典的选择之道:掌握六种类型的终极指南!

来源: 责编: 时间:2023-11-15 09:21:10 413观看
导读一、简介你可能会惊讶地发现,在Python的标准库中实际上有6种不同的字典类型!在某些情况下,开发者可能不想使用标准的Python字典(dict),在本文中将讨论Python中其他5种鲜为人知的字典。每种字典类型都是为特定需求而设计的。

一、简介

你可能会惊讶地发现,在Python的标准库中实际上有6种不同的字典类型!在某些情况下,开发者可能不想使用标准的Python字典(dict),在本文中将讨论Python中其他5种鲜为人知的字典。crl28资讯网——每日最新资讯28at.com

每种字典类型都是为特定需求而设计的。了解这些字典类型可以让Python开发者选择适合其特定需求的字典,从而提高编码效率和灵活性。crl28资讯网——每日最新资讯28at.com

二、Python字典是什么?

在Python中,字典(dict)是一种内置的数据结构,用于以键-值对的形式存储数据集合。你可能听过Python字典的其他名称,如查找表、映射、哈希映射或关联数组。crl28资讯网——每日最新资讯28at.com

Python字典的一个最全面的例子就是电话簿。可以使用电话簿快速检索与给定姓名(键)相关联的信息(值)。Python字典允许以最高效的方式存储和检索所需的数据;这就是为什么Python dict是这种编程语言中最常用的数据类型。crl28资讯网——每日最新资讯28at.com

三、Python字典的类型

大多数Python开发者通常只使用标准字典(dict)。有趣的是,Python还提供了其他几种内置的字典数据结构。尽管在大多数情况下,标准Python字典已经足够使用,但至少了解一下其他字典类型也会对开发者有所裨益。Python的不同字典类型如下:crl28资讯网——每日最新资讯28at.com

  1. dict
  2. collections.defaultdict
  3. collections.OrderedDict
  4. collections.ChainMap
  5. collections.Counter
  6. collections.UserDict

本文将逐个介绍每种类型的Python字典,并通过示例进行解释。crl28资讯网——每日最新资讯28at.com

3.1 dict

如前所述,Python中最常见的字典类型是标准类型(dict)。这种类型的Python字典可以使用花括号{}来轻松创建和更新。标准Python字典内置了许多函数,可以让工作更加轻松。crl28资讯网——每日最新资讯28at.com

标准Python字典的使用示例标准Python字典的使用示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

a = {'one': 1, 'two':2}print(a,type(a))# output: {'one': 1, 'two': 2} <class 'dict'>a.update({'three': 3}) #  相当于a['three'] = 3print(a)# output: {'one': 1, 'two': 2, 'three': 3}a['two'] = 2.1print(a['two'])# output: 2.1

请注意,Python字典中的值可以是任何类型,但键必须是唯一且不可变的。一般情况下,在标准Python字典中进行查找、插入、更新和删除操作的时间复杂度为O(1)。crl28资讯网——每日最新资讯28at.com

3.2 collections.defaultdict

Python中的另一种字典类型是defaultdict,可以从collections模块中导入。Python defaultdict字典用于想从字典中调用一个不存在的键时返回一个默认值。crl28资讯网——每日最新资讯28at.com

使用Python defaultdict的示例使用Python defaultdict的示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

from collections import defaultdicta = defaultdict(int)print(a['one'])# output:0a['one'] += 1print(a['one'])# output: 1

Python开发者在使用常规字典时,通常使用get()方法或直接处理KeyError异常。在这种情况下,使用collections.defaultdict可以使开发者的意图更加明确。crl28资讯网——每日最新资讯28at.com

3.3 collections.OrderedDict

collections.OrderedDict是Python 3.1中引入的一种Python字典子类。顾名思义,这种类型的Python字典可以记住键插入的顺序。如果特别关心Python字典中键插入的顺序,可以使用collections.OrderedDict。crl28资讯网——每日最新资讯28at.com

使用Python OrderedDict的示例使用Python OrderedDict的示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

from collections import OrderedDicta = OrderedDict({'one': 1, 'two': 2})print(a)# output: OrderedDict([('one', 1), ('two', 2)])a['three'] = 3print(a)# output: OrderedDict([('one', 1), ('two', 2), ('three', 3)])

collections.OrderedDict还有一个很酷的函数,可以改变一些键的顺序。可以使用move_to_end将其中一个键移到Python字典的末尾(last=True),或移到开头(last=False):crl28资讯网——每日最新资讯28at.com

使用Python OrderedDict的示例使用Python OrderedDict的示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

from collections import OrderedDicta = OrderedDict({'one': 1, 'two': 2, 'three': 3, 'four': 4})print(a)# output: OrderedDict([('one', 1), ('two', 2)])a.move_to_end('one', last=True) # 将'one'移至末尾print(a)# output: OrderedDict([('two', 2), ('three', 3), ('four', 4), ('one', 1)])a.move_to_end('three', last=False) # 将'three'移到开头print(a)# output: OrderedDict([('three', 3), ('two', 2),('four', 4),('one', 1)])

3.4 collections.ChainMap

另一种Python字典类型是collections.ChainMap,Python的ChainMap是一种类似字典的类,可以将多个字典合并为一个视图。这种类型的字典允许开发者在多个字典中搜索一个键,就好像它们都合并成了一个单一的字典。crl28资讯网——每日最新资讯28at.com

使用Python ChainMap的示例使用Python ChainMap的示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

from collections import ChainMapa = {'one': 1, 'two': 2}b = {'three': 3, 'four': 4}c = {'five': 5, 'six': 6, 'three': 3.1}merged = ChainMap(a, b,c)print(merged)# output: ChainMap({'one': 1,'two': 2},                   {'three': 3, 'four': 4},                   {'five': 5, 'six': 6, 'three': 3.1})print(merged['three']) # 只返回关键字的第一次出现结果# output:3

请注意,ChainMap只会返回要搜索的键的第一次出现。另外还要记住,ChainMap只存储对实际对象的引用;因此,如果在任何一个原始字典中进行了更改,ChainMap也会随之更新。crl28资讯网——每日最新资讯28at.com

使用Python ChainMap的示例使用Python ChainMap的示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

from collections import ChainMapa = {'one': 1, 'two': 2}b = {'three': 3, 'four': 4}c = {'five': 5, 'six': 6, 'three': 3.1}merged = ChainMap(a, b, c )a['one'] = 1.1print(merged['one'])# output: 1.1

3.5 collections.Counter

Counter是Python中另一个能够计数可散列对象的字典。Python开发者通常使用collections.Counter来计算可迭代对象中元素的频率;例如,可以使用这种类型的Python字典来计算句子中使用的单词数量。crl28资讯网——每日最新资讯28at.com

使用Python Counter的示例使用Python Counter的示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

from collections import Countersentence = "we can't control our thoughts, but we can control our words"a = Counter(sentence.split(' '))print(a)# output: Counter(              {               'we': 2, 'control': 2, 'our': 2,               "can't": 1, 'thoughts': 1,               'but': 1, 'can': 1, 'words': 1              }          )print(a.most_common(2)) # 获得2个出现次数最多的元素# output: [('we', 2), ('control', 2)]

如果需要列出出现频率最高的n个元素及其计数,从最常见到最不常见,可以在Counter对象上使用most_common函数。如果n为None,它将列出所有元素的计数。crl28资讯网——每日最新资讯28at.com

3.6 collections.UserDict

本文要讨论的最后一种Python字典类型是UserDict字典。UserDict也是collections模块提供的一个类。这个类设计成用作创建自定义字典类对象的基类。crl28资讯网——每日最新资讯28at.com

当需要定义自己的类似字典的数据结构时,可以使用collections.UserDict。想象一个简单的场景,需要将每个值乘以5并保存在自定义的Python字典中。通过使用UserDict,可以像这样实现:crl28资讯网——每日最新资讯28at.com

使用Python UserDict的示例使用Python UserDict的示例crl28资讯网——每日最新资讯28at.com

下面是代码片段。crl28资讯网——每日最新资讯28at.com

from collections import UserDictclass MyDict(UserDict):    def __setitem__(self, key, value):        super().__setitem__key, value * 5)d = MyDict({'one': 1, 'two': 2})print(d)#output: {'one': 5, 'two': 10}

还可以随时覆盖其他函数,如__setitem__()、__getitem__()和__delitem__(),以进一步自定义字典的行为。crl28资讯网——每日最新资讯28at.com

四、总结

在本文中,介绍了可以在不同情况下使用的不同类型的Python字典。尽管很多Python开发者只使用常规字典,但也可以在项目中尝试使用其他类型的Python字典。如果没有适合的字典,可以使用UserDict类来创建自己的类似字典的类。crl28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-25485-0.htmlPython字典的选择之道:掌握六种类型的终极指南!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python迭代器和生成器的实际应用场景

下一篇: 欧盟理事会就数字身份问题达成临时协议,将打造通用身份证明

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • iQOO 11S新品发布会

    iQOO将在7月4日19:00举行新品发布会,推出杭州亚运会电竞赛事官方用机iQOO 11S。
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
  • AI艺术欣赏体验会在上海梅赛德斯奔驰中心音乐俱乐部上演

    光影交错的镜像世界,虚实幻化的视觉奇观,虚拟偶像与真人共同主持,这些场景都出现在2019世界人工智能大会的舞台上。8月29日至31日,“AI艺术欣赏体验会”在上海
Top