问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Fluent Python 笔记(四):字典和集合

发布网友 发布时间:2024-09-29 07:32

我来回答

1个回答

热心网友 时间:22小时前

目录:

Fluent Python 笔记(一):数据模型

Fluent Python 笔记(二):序列基础

Fluent Python 笔记(三):高效操作序列

Fluent Python 笔记(四):字典和集合

Fluent Python 笔记(五):把函数当做对象

最近忙得团团转,更新进度缓慢。

本文将概述字典和集合的使用方法与底层实现。

字典(Dict)

字典是Python中最为核心的数据结构,广泛应用于程序中,并构成Python语言的基础。

模块命名空间、类和实例属性、函数的关键字参数等都是通过字典实现的。

字典被高度优化,其底层机制将在后续探讨。

字典构造示例

字典推导示例

灵活处理缺失键值的几种方法

为已知将频繁缺失键值的情况提供默认值,可使用defaultdict。

defaultdict工作原理

实例化defaultdict时提供default_factory,每次__getitem__传入不存在的key时,产生默认值。

字典的__missing__函数

__missing__函数仅在__getitem__调用时调用,产生默认值,其他函数无效。

自定义defaultdict示例

非str键转化为str进行查找

Python 3中查找效率高,尤其对于大字典,使用dict.keys()返回view效率极佳。

常用映射模块

collections模块中的defaultdict之外的常用映射类型

有序字典、计数映射、纯Python映射、自定义映射类型

不可变映射和映射proxy

集合(Set)

集合主要作用是去重

集合元素必须可哈希,set类型不可哈希,frozenset可哈希,可加入set中

集合构造方式

集合推导示例

字典及集合底层实现

字典内部使用哈希表,查找时间微不足道,无论大小,只要内存允许。

哈希表中的每个元素包含bucket,bucket中存储条目和值。

Python保持bucket空位率至少为1/3,当哈希表过满时重新构建。

查找字典时,使用哈希函数获取offset,遍历bucket。

插入和更新条目,查找空bucket时放入新item,找到符合key时覆盖原有值。

哈希表增长时,增加哈希值中用于offset的位数,降低碰撞率。

字典实用工作结论

对象满足可哈希条件

自定义__eq__方法时,必须实现__hash__,否则破坏哈希算法。

可变状态依赖的__eq__方法会抛出TypeError。

字典空间效率较低

替换dict为tuple减少内存使用

dict实现空间换时间

在Python 3中,字典view动态反应dict改变

总结:字典是Python中至关重要且应用广泛的结构,通常可作为模块内部结构的模拟。使用现成模块或约定俗成方法解决字典特殊需求,避免自行实现。集合和字典底层机制相似,早期版本的集合通过键值相同的字典实现,使用方法接近。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...把其中任意三面分上、中、下挂在旗杆上表示不同信号,一共可以组成... 质能转换爱因斯坦的形象比喻 质能转换基本概念 如何制作美味的抹茶冰激凌? 在淘宝网上开游戏卡和手机充值卡的店怎么寻找货源?O(∩_∩)O谢谢 ...它们的直径的比是( ),周长的比是( ),面积的比是( )? 很急啊!_百度... ...比是5比3,半径比是多少,直径比是多少,面积比是多少,你发现了什么... ...周长比是5比3,半径比是(),直径比是(),面积比是()。 鸡肝煮多长时间 ...是5:3,他们的直径比是(),周长比是(),面积比是(),他们的周长与自己半... 咽喉炎如何三分治七分养(咽喉炎的治疗方法有哪些) fluent15.0怎么输入调用模型命令?/define/models/addon-module3_百度... 慢性咽喉炎喉咙痒小妙招 l+like+the+sweet。lt+is+nice。对吗? 福建舰多大排水量 ...到的多?我用的是4兆光纤而且其他笔记本电脑都能用。其它_百度... ...为什么上网速度只有54,下载只有3k多点,和别人共有4m带宽,_百度... EchoLifeHG522-c路由器,我一个人用怎么才54MBPS,我用的是4兆网... ...说是4兆连接5台电脑 可能近几天网速很慢 下面显示的是54MBPS... ...4兆的网?在电脑右下角显示54mbps是什么意思? 怎么看出来是装了4兆的网?电脑右下角显示54mbps是什么意思? 我贷款买了车,还没还清贷款现在缺钱用,可以把车卖给别人吗,这样做违法... 个税完税凭证什么打印 笔记本电脑音响发出咔咔杂乱的声音,一直不停。重启后右下角小喇叭出现... 中医是怎样治疗女性妊娠剧吐症的? 西医是怎样治疗女性妊娠剧吐症的? 两位数有哪些 陈寅恪著作书目 怀孕初期吐得厉害怎么办 妊娠剧吐的评估和补液原则 ...各位大虾看清楚条件再作答!!!小弟在线等答案,满意有高分追加!!_百度... 高分 进程system cpu占用50 System的CPU占用率100的问题,高分,大虾帮下`` 推荐下常熟好吃的饭店 求推荐常熟哪里有好吃的,沙家浜景区酒楼推荐 请问常熟有什么好吃的地方?好玩的地方,常熟梅村古镇旅游攻略路线_百度... 上海法夏会展服务有限公司怎么样? 上海金喜文化传播有限公司怎么样? 涤纶短纤交易会展商 体验馆展厅设计 预产期到了双顶径9.8...股骨径74,医生说头还没完全落下来。胎儿偏大,顺... 有哪些给芒果剥皮的技巧分享? 陈寅恪魏晋南北朝史演讲录图书目录 E5606/1G 1066MHz/146G/SAS 6IR/DVD(热插播) 这是什么意思啊?请明白... Haswell i7-4770K与AMD A10-6800K/Richland APU性能对比评测:谁更... 板栗如何快速去外壳呢? 生栗子如何去皮最快,你知道吗? 关注Intel 酷睿i7 4770K与关注AMD A10-6800K游戏与商用哪个好? 英特尔i7 4770集显强还是amd的三代APU强,求电脑高手解答!!! 抚顺驾校收费一览表(抚顺驾校收费一览表2020)