从上一篇文章开始,开始了Python中常用的数据结构,也就是容器类的介绍,上一篇文章简要介绍了列表的使用,这一篇文章准备介绍一下Python中字典(dict)的使用。
本文的主要内容大概如下:1、简要介绍Python中字典的特点2、遍历字典的几种方法3、字典中的常用方法4、字典推导式
Python中字典的特点Python中的字典(dict)是一种非常强大的数据结构,对应到其他编程语言中的“哈希表”这种容器类型。
Python中的字典有如下特点:1、键值对存储:便于通过键值快速检索、定位数据,比列表的索引方式更加方便。2、关于顺序:在Python3.7之前,字典中的键值对是无序的。从Python3.7开始,字典中的键值对保持插入的顺序;但是,需要留意的是:自Python3.7开始,dict类型正式“有顺序”了,不过只是保留键的插入顺序。你不能随意重新排列dict中的键。3、键的不变性:字典中的键必须是不可变的数据类型,比如(字符串、数字、元组),因为底层存储需要通过键进行哈希;值的类型是任意的。4、可变性:字典是可变的,可以随时修改、添加和删除键值对;
字典的遍历关于字典中最常用的一个操作,就是对字典的遍历,在Python中有几种常用的遍历方式,可以根据实际需要自行选择:首先生成测试数据:还是以人员信息为例,这次我们使用嵌套字典的方式存储,字典的key为name,字典的值为完整的人员信息的字典,包含name、age、gender、height
执行结果:
主要注意的是,每次执行程序,生成的测试数据都是不一样的,所以,上面的执行结果只是一个示例。
方法1:遍历字典的键
通过keys()方法进行遍历,与直接对persons进行遍历是一样的。
方法2:遍历字典的值
方法3:遍历字典的键值对:
字典常用方法关于字典的增、删、改的操作比较简单,这里就不列举了。下面就几个在实际应用中,比较实用的方法做一下简单介绍。1、根据可迭代对象初始化一个字典:fromkeys()在实际使用中,有些数据可能是以其他形式存储的,我们在处理过程中,可能首先需要初始化一个字典,然后进行更进一步的处理:比如,游戏开始之初,对玩家积分进行一个初始化的操作,后续根据游戏进度进行积分的动态更新
执行结果:
2、获取字典中的值 get()实际使用中,要通过键获取对应的值有两种方式:1)通过[key]的形式2)通过get()方法两者的不同在于,[key]索引的形式,当键值不存在时会抛异常;get()方法,键值不存在时默认返回None,也可以设置指定的默认值。
执行结果:
3、setdefault()方法:以一个简单的人员按照性别分组的需求为例,说明该方法的使用:
上面的代码中,我们需要进行分支判断,如果key在字典中已经存在,则将姓名追加到值的列表中,如果不存在,则首次进行初始化为值列表的操作。逻辑没有问题,但是,有点繁琐,不太pythonic!接下来使用setdefault()方法进行改造:
没有了分支判断的操作,相对简洁了一些。
执行结果:
字典推导式如同通过列表推导式构造列表对象,Python也支持通过推导式构建字典对象。
字典推到式的语法类似于列表推导式,只需要把[]换为{},单个元素,换为kk: vv形式的元素即可。如:
还是以上面的人员信息的测试数据生成为例,这次,我们改用字典推导式来实现:
执行结果:
可以看到,前面通过for循环生成的测试数据,现在通过字典推导式,只需要一行代码就搞定了。