《流畅的python》阅读笔记 - 第三章:字典和集合
admin
2024-01-29 10:31:48
0

泛映射类型

isinstance(object,object_type) 用来检测一个object对象是不是一个object_type类型.所以isinstance(object,abc.Mapping)用来检测object是不是映射类型.

字典推导

例程示例了字典的推导:

#创建一个列表,元素为集合
DIAL_CODES = [ (86, 'China'),(91, 'India'),(1, 'United States'),(62, 'Indonesia'),(55, 'Brazil'),(92, 'Pakistan'),(880, 'Bangladesh'),(234, 'Nigeria'),(7, 'Russia'),(81, 'Japan'),]#拆分DIAL_CODES里面的代码,code 到 code,country 到 country
#注意到,country_code 和 DIAL_CODES 的 country 和 code 的顺序是相反的
country_code = {country:code for code,country in DIAL_CODES}
print(country_code,end="\n\n\n")country_code_2 = {code:country.upper()for country,code in country_code.items()if code <76}
print(country_code_2)

输出:

{'China': 86, 'India': 91, 'United States': 1, 'Indonesia': 62, 'Brazil': 55, 'Pakistan': 92, 'Bangladesh': 880, 'Nigeria': 234, 'Russia': 7, 'Japan': 81}{1: 'UNITED STATES', 62: 'INDONESIA', 55: 'BRAZIL', 7: 'RUSSIA'}

可以通过集合的items()方法来获取一个可迭代的列表,然后用if来限制条件.

用 setdefault处理找不到的键

使用 setdefault可以节省一些操作:

"""创建从一个单词到其出现情况的映射"""
import sys
import re
WORD_RE = re.compile('[a-zA-Z]+')
index = {}with open("zen.txt", encoding='utf-8') as fp:for line_no, line in enumerate(fp, 1):for match in WORD_RE.finditer(line):word = match.group()column_no = match.start()+1location = (line_no, column_no)index.setdefault(word, []).append(location)# 以字母顺序打印出结果for word in sorted(index, key=str.upper):print(word, index[word])

这里我修改了正则表达式的内容,由于我们日常的文本很可能含有汉字,所以不能直接使用w+来提取,否则会把汉字的句子一句一句也提取出来
enumerate()(参考enumerate)这里,生成一个带序号的列表,具体可以查看参考中的示例协助理解.
for match in WORD_RE.finditer(line):根据设置好的规则([a-zA-Z]+)逐行查看,如果找到就记录下来,最后连接行列数,这里只有match.start()+1,是计算它的位置,及首字母出现在第几列,行数不需要,他在enmuerate就已经生成了.

映射的弹性建查询

如果查询到某个不存在的键值,我们希望它就给我们返回某一个默认的值,可以使用defaultdict这个类型,也可以在自定义的dict的子类中,通过特殊方法__missing__方法来实现,
如果要自定义一个映射类型,通过集成collections.UserDict()类来实现

字典的变种

方法含义
collections.OrdereDict添加建的时候会保持顺序,OrdereDict默认删除或者返回最后(最前)一个元素,感觉合适做队列或者栈
collections.ChainMap容纳不同的映射对象
collections.Counter一个计数器
collections.UserDict用 python 实现标准的 dict
UserDict比dict方便一些

不可变的映射类型

标准库中所有的映射类型都是可以改变的,MappingProxyType可以返回一个试图,这样就不会修改到原来的映射

相关内容

热门资讯

关于万历年间的一些民间故事? 关于万历年间的一些民间故事?万历年间的一天,广宁一个叫孙林的药材商在大街上闲逛,一个看相的一看到他,...
随身翻译机选择什么品牌好? 随身翻译机选择什么品牌好?1、随身翻译机怎么选购?2、随身翻译机随身翻译机到哪里买?3、随身翻译机里...
求“困知勉行”的解释 求“困知勉行”的解释kùn zhī miǎn xíng困知:遇困而求知;勉行:尽力实行。在不断克服困...
我该怎么整容了? 我该怎么整容了?我觉得你不用整容,你长得挺好的,男人结结实实就行,皮肤不太好,有豆豆,不要吃辛辣食物...
为什么叫云时代 为什么叫云时代就是一切资源都在云上,云指终端
综合来说,空客和波音哪家公司的... 综合来说,空客和波音哪家公司的飞机更好?波音比空客更好些。根据规模比较波音排名64,空客排名105。...
哪个季节适合出去旅游? 哪个季节适合出去旅游?在各种季节游玩中,人们讲的最多的是春游。因为人最喜欢的是新生的物品,而春天是万...
股市,情绪指标什么意思 股市,情绪指标什么意思市场情绪指标,是反应市场情绪的一种技术指标,可以反应出市场的情绪是否过热,还是...
双重身份用什么数字表示? 双重身份用什么数字表示?有一种说法叫斜杠青年。俺都是用负数表示负数表示多数是用X表示吗,我猜的2吧,...
谁能介绍一些关于爱情的书籍? 谁能介绍一些关于爱情的书籍?外国的有文学价值的书有些难啃,亚洲岩井俊二的情书,一定要看书,不是电影,...
六岁的小女孩上幸福来敲门 六岁的小女孩上幸福来敲门六岁的小女孩上幸福来敲门节目的需要吧挺有意思的看到还是有小孩子上的
马和鹿是什么成语 马和鹿是什么成语指鹿为马zhǐ lù wéi mǎ[释义] 把鹿说成马。比喻故意颠倒黑白。[语出]...
有没有主角穿越成狐仙,玉藻前,... 有没有主角穿越成狐仙,玉藻前,金毛白面九尾狐的综漫小说,同人小说?小鸡漫画上有一个,名字应该是《狐妖...
2-8人去张家界五日四晚跟团游... 最近我带着几位朋友计划了一次张家界五日四晚的旅行,人数在2到8人之间。说实话,一开始还担心价格太高或...
螳螂电视剧剧情介绍 螳螂电视剧剧情介绍 1948年冬,我军准备渡江作战,解放南京。国民党政府准备将一批珍贵国宝转运到台湾...
重庆旅游五日游多少钱,重庆旅游... 在繁忙的都市生活中,我总是渴望能带着孩子逃离喧嚣,去一个充满新奇与乐趣的地方,享受一段难忘的亲子时光...
鎏金观景台倒映江心·长桥衔日绘... 南京鱼嘴湿地公园以其独特的地理位置和丰富的湿地生态,融合了自然观赏、生态保护教育、休闲娱乐与亲子活动...
平时出行意外险该选哪个?综合意... 平时出行意外险该选哪个?综合意外险有什么好处?平时出行一定要注意安全,保险的配备也是十分必要。一般来...
丽江文旅推介走进成都,邀您体验... 当苏超球迷嗨到冒烟,兵马俑人潮涌动,重庆火锅沸腾至凌晨3点,成都世运会即将燃爆全城之际,云南丽江市却...
直男眼里的《山河令》逗乐网友,... 直男眼里的《山河令》逗乐网友,直男眼里的这部剧是怎样的?在直男的眼中,这就是知己的感觉,这就是真的兄...