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

您所在的位置:网站首页 字典属于python数据类型吗 Python字典的选择之道:掌握6种类型的终极指南!

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

2024-07-15 01:57| 来源: 网络整理| 查看: 265

本文将介绍Python字典的6种类型以及如何选择正确的字典。 【微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩】

一、简介

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

每种字典类型都是为特定需求而设计的。了解这些字典类型可以让Python开发者选择适合其特定需求的字典,从而提高编码效率和灵活性。

二、Python字典是什么?

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

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

三、Python字典的类型

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

dictcollections.defaultdictcollections.OrderedDictcollections.ChainMapcollections.Countercollections.UserDict

本文将逐个介绍每种类型的Python字典,并通过示例进行解释。

3.1 dict

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

标准Python字典的使用示例

下面是代码片段。

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

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

3.2 collections.defaultdict

Python中的另一种字典类型是defaultdict,可以从collections模块中导入。Python defaultdict字典用于想从字典中调用一个不存在的键时返回一个默认值。

使用Python defaultdict的示例

下面是代码片段。

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

Python开发者在使用常规字典时,通常使用get()方法或直接处理KeyError异常。在这种情况下,使用collections.defaultdict可以使开发者的意图更加明确。

3.3 collections.OrderedDict

collections.OrderedDict是Python 3.1中引入的一种Python字典子类。顾名思义,这种类型的Python字典可以记住键插入的顺序。如果特别关心Python字典中键插入的顺序,可以使用collections.OrderedDict。

使用Python OrderedDict的示例

下面是代码片段。

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

collections.OrderedDict还有一个很酷的函数,可以改变一些键的顺序。可以使用move_to_end将其中一个键移到Python字典的末尾(last=True),或移到开头(last=False):

使用Python OrderedDict的示例

下面是代码片段。

from collections import OrderedDict a = 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是一种类似字典的类,可以将多个字典合并为一个视图。这种类型的字典允许开发者在多个字典中搜索一个键,就好像它们都合并成了一个单一的字典。

使用Python ChainMap的示例

下面是代码片段。

from collections import ChainMap a = {'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也会随之更新。

使用Python ChainMap的示例

下面是代码片段。

from collections import ChainMap a = {'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.1 print(merged['one']) # output: 1.1 3.5 collections.Counter

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

使用Python Counter的示例

下面是代码片段。

from collections import Counter sentence = "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,它将列出所有元素的计数。

3.6 collections.UserDict

本文要讨论的最后一种Python字典类型是UserDict字典。UserDict也是collections模块提供的一个类。这个类设计成用作创建自定义字典类对象的基类。

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

使用Python UserDict的示例

下面是代码片段。

from collections import UserDict class 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__(),以进一步自定义字典的行为。

四、总结

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

推荐书单 《Python从入门到精通(第3版)》

《Python从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分27章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、文件及目录操作、操作数据库、使用进程和线程、网络编程、异常处理及程序调试、Pygame游戏编程、推箱子游戏、网络爬虫开发、火车票分析助手、数据可视化、京东电商销售数据分析与预测、Web编程、Flask框架、e起去旅行网站、Python自动化办公、AI图像识别工具等内容。书中所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。

精彩回顾 《轻松玩转Python,5个步骤打造惊艳的折线图》 《4个杀手级Pycharm高效插件》 《10个Python中的数据类型技巧》 《Python的集合模块,使用数据容器处理数据集合》 《使用Python类型提示,保持代码整洁,提高可读性》 《5个实用的Python编程小技巧》 【微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩】

以上就是“Python字典的选择之道:掌握6种类型的终极指南!”的全部内容,希望对你有所帮助。 ​ ​关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3