首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python入门系列3——字典

上节回顾:Python入门系列2——元组

本节我们将继续介绍Python中最重要的内置数据结构——字典(dict)

字典在其他语言中被称作哈希映射(hash map)或者相关数组(associative arrays)。我们可以按照“字典”的字面意思来理解其数据结构及实现原理。当我们在字典中查找某一个字时,如果我们从第一页开始往后翻直到找到我们要查找的字,我们需要耗费相当长的时间完成查找的任务。但是字典给我们提供了一个索引表(如偏旁部首表),我们可以先在字典的索引表里查找这个字对应的页码,然后直接翻到翻页,这样的方式查找字,比按顺序一页一页找快得多,并且不会随着字典大小的增加而变慢。

比如如果我们需要根据id来查找对应的考试成绩,如果用list实现,则需要两个list:

给定了id=1,那么我们需要先在score中找到1对应的位置,再从score中取出对应位置的成绩,列表越长,所耗费的时间就越长,这显然不是一种很科学的做法。

使用字典方式,我们可以直接根据id-score的对照表,快速通过id查找到对应的score。比如在已知id为1的情况下,字典在内部可以直接计算出1对应的存放score值的内存地址,然后从该地址中取出score的值92,所以速度非常快。

1.1

创建字典

字典是一种大小可变的键值对集,其中的键(key)和值(value)都是Python对象。字典的创建使用大括号{ }包含键值对,并用冒号:分隔键和值,形成主键:取值对,如下所示,创建id-score字典:

output:

下面推荐一种非常优雅的字典创建方式,从两个序列中的元素两两配对形成一个字典,不过这里需要for循环及zip()函数的知识。

zip()函数用于将多个序列(列表、元组等)中的元素配对,产生一个如[(列表1元素,列表2元素),(,)]的新的元组列表。for循环用于重复执行将值放入键中的操作。

1.2

修改字典

从上面的字典我们也可以看出,字典中的数据元素是无序的,并不会按照初始化的顺序排列。不同键所对应的值可以相同。但是字典中的键必须是唯一的。注意字典中的id:1,2,...是键。

除了以上初始化的方式向字典中加入键值对,我们还可以通过键添加,比如:

output:

并且可以修改一个键对应的值:

output:

1.3

字典索引

字典的元素访问(以及插入、设置)方式与列表和元组一样。不同的是,列表和元组的索引号是按照顺序自动生成,而字典的索引号是键。如下所示:}

1:92,2:83,3:94,4:80,5:98,6:86}

score_dict[5]

output:

98

字典中某值的索引还可以通过get方法,如果字典不包含某个键,可以返回None,或者自己指定的值:

output:

92

86

如果在字典中不存在索引的键,则系统会报错:

output:

Traceback (most recent call last):

File "", line 1, in

score_dict[8]

KeyError: 8

我们可以通过in判断是否存在某个键,其语法跟在列表和元组中判断是否存在某个值是相同的,也可以使用内置的has_key()方法:

True

False

True

False

如果不太确定字典中有哪些键或者值,我们可以使用keys()方法或者values()方法:

output:

keys are [1, 2, 3, 4, 5, 6]

values are [92, 83, 94, 80, 98, 86]

在有些情况下,我们需要取出字典中的键值对用于下一步的分析,此时可以使用items()方法,该方法将返回所有键值对,并将其保存在一个元组列表(列表中的元素为元组)中,如下所示:

output:

[(1, 92), (2, 83), (3, 94), (4, 80), (5, 98), (6, 86)]

1.4

字典删减

字典的删减有三种方法:

使用del函数对单一元素或者整个字典进行删除

使用pop()方法删除单一元素

使用clear()方法清空词典的所有元素

output:

{}

字典结构适用于许多需要高速查找的地方,与此同时,它需要占用大量的内存,这相当于牺牲了计算机的内存空间来换取时间上的缩短。

1.5

字典内置函数

Python字典包含了以下内置函数:

1.6

字典内置方法

Python字典包含了以下内置方法:

大数据爱好者,请扫以下二维码加“SAS中文论坛”志愿者为好友,“SAS中文论坛”志愿者会把您邀请入群。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180324B0A48E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券