前面刚说了列表和元组,两个都是讲索引编号和元素一一对应的卧槽类型,但通过编号来访问数据,一般认为是对用户不友好的设定(尤其是这些元素都是数字的时候,拿一个编号数字去索引另一个元素数字,颇有种查手册的无力感),而就像电话薄,我们习惯的友好的索引方式是人名和电话相互联系,把一个重要但不容易记录的数据元素和一个相对来说不是那么重要但易于记录的数据建立映射关系,这就是Python中字典Dict诞生的需求所在。
但需要注意的一点是,电话薄中的人名可以重复(我们班就有两个女同学重名……),但字典却不支持这样的操作(电脑毕竟还不是人嘛~),但事实上,人在记录电话薄时遇到重名一般也会加以区分(大张三和小张三之类)。
字典的创建和删除
创建字典的一般形式如下:
dict = {Key1 : Value! , Key2 : Value2……}
字典由{}包裹,元素之间用,分隔,每个元素由一个Key和Value的数据对构成,二者用:隔开;
字典元素的删除可以这样操作:del dict[Key]即为删除键值为Key的元素,而在def后直接加字典名,可以删除整个字典。
除此之外,如同列表一样,字典还支持一个清空操作,使用Dirt.clear()可以删除字典中的所有元素使之成为一个空字典。
字典元素的访问
字典元素的访问是使用键值作为索引的,基本形式如下:Dict[Key],如果输入的Key并不存在于这个字典之中,Python则会抛出一个Key Error错误;
为了避免这种错误,可以有以下的两个解决方式。
比较符合人思维逻辑的是,既然有可能不存在,那我就先检查一下到底存不存在,也就是先用Key in Dict检查元素,如果存在时再进行访问。另一个是巧妙利用get进行试探,用法是Dict.get(key[,default])这样,将严格要求键值存在的[]访问转化成get()函数访问,即使键值不存在也只会返回一个None而已,不至于影响整个程序的执行。
字典元素的更改
使用字典内置的update(0方法可以批量更新字典元素,用字典A去更新字典B,如果键值有重复,以字典A为准,如果键值只在A中存在,就将该元素加入B中,这种操作很符合“更新”这个意义;
字典单个元素(的Value)修改直接用=就好了;
有序字典
字典总体上是一种无序类型,我们建立一个稍微长一点的字典,然后紧接着Print一下都会发现元素顺序被调整了,这是Python自动的行为,是为了使用某种方法加快检索效率(本菜鸡很想装一波B,把什么霍夫曼红黑树哈希表都提两句,但是……)
如果确实需要保证字典元素的顺序,也不是做不到:使用有序字典OrderedDict,但是值得注意的是,这个数据类型算是几个卧槽类型的扩充,却不包括在Python的内建数据类型中,因此需要文件导入容器(collections)模块。
Python的导入如下from collections import OrderedDict
创建的方法也不太一样:
ODict = OrderedDict([(Key1,Value),(Key2,Value2)……])
必须使用OrderedDict()来定义,用[]包围整个字典,每一个元素用()包围,互相以,分隔,元素内部的键值和内容用:分隔;
多说两句
算了不多说了,
祝自己晚安。









网友评论