python基础教程学习笔记---(4)字典

序列是python中的一种数据结构,映射是另一种。映射(mapping)通过名字来引用值。python内建的唯一一种映射结构是字典。字典中的值没有特殊的顺序,但都存储在一个特定的键中。键可以是数字、字符串甚至数元组。

1、字典的使用:

序列通过索引来找到元素的取值。

字典通过键来获取它的值。

字段比列表在某些方面更加适用:

①游戏棋盘是用坐标值来组成的

②文件是用文件名来确定的

③数字电话,地址对应一个联系人

这些都不能通过索引来代替。

2、字典的创建:

字典是由键值对组成,一个键值对称为一项。键与值之间用冒号隔开,项与项之间用逗号隔开,整个字典用一对大括号括起来。空字典,即不包含任何项的字典,是有一对大括号组成。

列表,用方括号。

元组,用圆括号。

字典中的键是唯一的,同一个字典中不允许重复,值则是不唯一的。

使用dict函数来建立字段。

3、基本字典操作:

字典的基本行为包括:

①len返回字典中项的数目。

②dic1[k]返回字典dic1中键为k的值。

③dic1[k]=v将值v关联到字典dic1的键k上。

④del dic1[k]删除字典dic1中键为k的项。

⑤k in dic1检查字典dic1中是否含有键为k的项。

可以看到,dic1[k]=v的用法既可以为字典添加新项,也可以用于更改现有项的值。

另外,有:

①键类型:字典的键不一定为整数类型,也可以是浮点型、字符串、元组等等。

②自动添加:为字典中不存在的键分配一个值时,会自动在字典中创建这样一个键值对。

③成员资格:k in dic1是用来查找键是否存在,而不是值是否存在。

4、字典方法:

(1)clear方法

clear方法用于清空字典,但没有返回值。

注意以下两种区别:

dicx与dicy并不是两个字典,而是指向同一字典的两个代号。对dicx的改变从而会影响dicy。因此,对dicx重新赋值或者清空都会影响dicx字典本身,从而影响dicy。

dicx与dicy最初都指向同一个字典。后来使用dicx={}重新将dicx指向了另一个空字典。此后,dicx与dicy就是两个不同的字典,对dicx的改变将不影响dicy。

(2)copy方法:

copy方法主要用于将一个字典复制产生另一个字典,但这种复制属于浅复制(shallow copy)。

对字典x使用copy方法产生一个副本y。对y进行项的添加、删除、清空、值的替换都不影响x,但是对值的改变是会影响到x字典的。

(3)deepcopy函数

deepcoop函数是相对与copy方法的深复制。但它不是字典内建的方法,而是copy模块中的deepcopy函数。

deepcopy函数是一种深复制,复制完成后,非副本做出的任何改变都不会影响到元字典本身。

(4)fromeys方法

fromkeys方法主要是为创建新的字典,该字典所有的键都是相同的值。新项一定要给出键,值可以不给,不给就默认为None。

从上面的例子可以看出,使用fromkeys方法只能产生一个新的字典,而不能该变一个字典本身,或者为一个旧字典添加新项。并且fromkeys方法只能为添加的键使用一个共同的值,即所有的键的值都是相同的,键要么都是none,要么都是一个值。

(5)get方法

get方法是一种访问字典项的方法。如果使用键来访问字典中的项,当我们试图访问字典中不存在的项时会出错。

但是使用get方法则会返回一个默认值,比如none。这个默认值也可以更改。

举例:查询用户电话和地址,对空用户进行了处理。

(6)has_key()方法

用于检查字典中是否含有给出的键。

相当于k in dic

(7)items方法

items方法将所有的字典项以列表方式返回。产生的列表的每一个元素都是原来字典的一项(键-值),但项与项之间在返回是并没有特殊的顺序。

(8)iteritems方法

iteritems方法的作用与items方法大致相同,但是会返回一个迭代器对象而不是列表。

在很多情况下iteritems更高效。

(9)keys方法

keys方法是将字典中所有的键以列表形式返回。类似于items。

(10)iterkeys方法

iterkeys方法是将字典中的键以迭代器的方式返回。类似于iteritems。

(11)popitem方法

popitem方法类似于列表中的list.pop。list.pop方法会弹出列表中的最后一个元素,而popitem弹出一个随机的项。因为在字典中没有顺序的概念。如果想一个接一个的移除并处理项,这个方法就非常有效。

每一次popitem()方法就会在字典中随机移除一项。

字典中没有append等级的方法,这是因为在字典中没有顺序的概念。

(12)setdefault方法

setfault方法在某种程度上类似于get方法,就是能够获得给定键相关联的值。

除此之外,setdefalut方法还能在字典中不含有给定键的情况下设定相应的键值。

setfault方法有两个作用,一个是根据键查看某一个已经存在的项的值,第二是为字典添加一个新的项,添加时可以指定项中的值,也可以不指定,那么就会自动使用默认值None。

(13)update方法

update方法可以利用一个字典去更新另外一个字典。

对于一个旧字典,使用新字典来更新,新字典中的项可以是一项也可以是多项。

如果旧字典中没有新字典中的键,那么新字典中的那项就会被添加到旧字典中。

如果旧字典中有相同的键,那么会用新字典中项的值替代旧字典中的项的值。

(14)values方法

values方法用于以列表的形式返回字典中的值。与items方法和keys方法类似。由于字典中的值可能相同,因此,返回的列表中可以包含重复的元素。

(15)itervalues方法

itervalues方法用于以迭代器的形式返回字典中的值。与iteritems方法和iterkeys方法类似。由于字典中的值可能相同,因此,返回的列表中可以包含重复的元素。

5、小结:

时间: 2024-12-05 22:23:09

python基础教程学习笔记---(4)字典的相关文章

<<Python基础教程>>学习笔记之|第01章|基础知识

本学习笔记主要用要记录下学习<<Python基础教程>>过程中的一些Key Point,或自己没怎么搞明白的内容,可能有点杂乱,但比较实用,查找起来也方便. 第01章:基础知识 ------ Jython:      Python的Java实现,运行在JVM中,相对稳定,但落后于Python,当前版本2.5,在TA(Python+Robot)会用到 IronPython:  Python的C#实现,运行在Common Language Runtime,速度比Python要快 >

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第04章 | 字典

第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中,键可以使字符,数字,或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每个键都是由坐标值组成的元祖 存储文件修改的次数,文件名作为键 数字电话/地址薄 函数传递值def func(x,*args,**args): 如果要建公司员工与座机号的列表,如果要获得Alice的座机只能这么找 >>> names   = ['Alice','Bob','Tom'] >>> n

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第09章 | 魔法方法、属性和迭代器

这一章,有点抽象,看着有点蛋疼! 双下划线__future__或单下划线有特殊含义,在Python中,这些名字的集合称为魔法方法:最重要的是__init__和一些处理访问对象的方法,这些方法允许你创建自己的序列或者是映射. ------ 准备工作: 将__metaclass__=type放在模块的最开始位置,以确保类时最新式的.考虑下面两个类 class NewStyle(object): more_code_here class OldStyle: more_code_here 如果文件以__

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第10章 | 充电时刻

第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简单的模块 #hello.py print ("Hello,World!") >>> import hello Traceback (most recent call last): File "<pyshell#56>", line 1, i

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第05章 | 条件、循环和其他语句

第05章 | 条件.循环和其他语句 ------ print 和 import #如果要打印多个语句,用,分割 >>> print "Name is:","Sherry.","Age is:",40 Name is: Sherry. Age is: 40 >>> print (1,2,3) #如果要打印元祖 (1, 2, 3) >>> print 1,2,3 #print语句会在每个元素间插入

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第13章 | 数据库支持

备注:这章内容相对介绍的比较简单,不过例子比较使用,主要是要掌握如果连接,使用数据库,并以SQLite做示例 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,现在已经通过了一个标准的DB API.目前的API版本(2.0)定义在PEP249中的Python Database API Specification v2.0中. 异常 为了尽可能准确地处理错误,API中定义了一些异常.它们被定义在一种层次结构中,所以可以通过一个except块捕捉多种异常. 连

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第06章 | 抽象

第06章  抽象 ------ 懒惰即美德 假如要计算斐波那契数列(任何一个数是前两数之和的数字序列) >>> fibs=[0,1] >>> for i in range(8): fibs.append(fibs[-2]+fibs[-1]) #fibs[-2]+fibs[-1]后两位数,append往后添加 #运行后,包含10个斐波那契数列的10个数字是 >>> fibs [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 如果允许用户

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第02章 | 列表和数组

第02章: 列表和数组 ------ 在Python中最基本的数据结构是序列,每个元素分配一个序号,即元素的序号,也即索引.注意,需要从0开始,第一位0,第二位为1,依次类推. Python包括: 字符串,列表,元祖,字典 这四种常用数据结构,或者说四种序列,其中元祖为不可变序列. 列表和元祖的主要区别 列表可变,而元祖不可变             >>>list1 = ['Tom',40] 所以元祖: 主要用于存储不变的数据   >>> >>> t

【学习笔记】Python基础教程学习笔记

教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")------>hahahah a = 100 print(a)----->直接打印a的值 a = 18 print("我的年龄是%d岁"%a)------>我的年龄是18岁 age = 18 high = 178 print("我的年龄是%d岁,我的身高是%dcm&quo