版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章字典第8章字典内容提纲8.1什么是字典28.2字典的创建和使用38.3字典的基本操作4358.4字典的格式化字符串18.5字典的实例应用内容提纲8.1什么是字典28.2字典的创建和使用38引例引例假设有一种表格,第一列表示学号,第二列表示学号所对应的学生姓名,它们的关系一一对应现在想查找学号是20170001的学生,我们从表中对应的第二列,就能很方便地知道该学生的姓名是“张三”,如右表:20170001张三20170002李四20170003王五20170004赵六引例20170001张三20170002李四201700038.1什么是字典字典是Python语言中唯一的映射类型。映射类型对象里哈希值和指向的对象,通常被认为是可变的哈希表。字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。字典是Python中最强大的数据类型之一,它与列表、元组等其他序列类型的主要区别有以下几点。(1)存取和访问数据的方式不同。(2)映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。(3)映射类型用键直接“映射”到值。(4)字典支持索引操作(索引值为键值),但不支持切片操作,因为切片操作是针对索引值具有连续性,而字典的键不具备连续性。(5)字典中的键必须不可变且不重复,值可以是任何类型。8.1什么是字典字典是Python语言中唯一的映射类型。8.2字典的创建和使用字典就是用花括号{}包裹的键值对的集合(键值对有时也被称作项或元素)。在字典的创建过程中,要注意以下几点。(1)键与值之间用冒号“:”分开;(2)项与项之间用逗号“,”分开;(3)字典中的键必须是唯一的,而值可以不唯一。8.2字典的创建和使用字典就是用花括号{}包裹的键值对的8.2字典的创建和使用8.2.1直接创建字典创建一个空的字典:>>>mydict={}#创建一个空的字典>>>mydict#输出此字典的内容{}可知结果为空的。创建一个与引例相对应的字典:>>>student={20170001:'张三',20170002:'李四',/20170003:'王五',20170004:'赵六',}8.2字典的创建和使用8.2.1直接创建字典8.2字典的创建和使用8.2.2通过dict函数创建字典dict函数是字典类的构造函数,也可以利用此函数来创建字典。创建一个空字典:>>>dict(){}还可以传入键值对创建字典。>>>dict(a=1,b=2,c=3){'b':2,'a':1,'c':3}可以传入映射函数创建字典。>>>dict(zip(['a','b'],[1,2])){'b':2,'a':1}8.2字典的创建和使用8.2.2通过dict函数创建8.2字典的创建和使用8.2.2通过dict函数创建字典dict函数是字典类的构造函数,也可以利用此函数来创建字典。创建一个空字典:>>>dict(){}还可以传入键值对创建字典。>>>dict(a=1,b=2,c=3){'b':2,'a':1,'c':3}可以传入映射函数创建字典。>>>dict(zip(['a','b'],[1,2])){'b':2,'a':1}8.2字典的创建和使用8.2.2通过dict函数创建8.2字典的创建和使用还可以传入可迭代对象创建字典。>>>dict((('a',1),('b',2))){'b':2,'a':1}另外,也可以用dict函数,对字典进行如下操作:>>>mydict={'b':2,'a':1,'c':3}#定义一个字典mydict>>>a=dict(mydict)#将mydict作为dict函数的参数>>>print(a) #输出字典a{'b':2,'a':1,'c':3}在创建完一个字典后,可以利用len函数来获取字典的长度,也就是获取该字典中键值对的个数。下面求字典mydict的长度。>>>len(mydict)3得到的结果为3,说明此字典中包含了3个键值对。8.2字典的创建和使用还可以传入可迭代对象创建字典。8.2字典的创建和使用8.2.3字典的修改和删除修改字典中已存在元素的值,操作如下:>>>dict={'Name':'huang','Age':20,'Class':'10'}>>>dict['Age']=30;#将键'Age'所对应的值改为30>>>dict{'Class':'10','Age':30,'Name':'huang'}在实际操作过程中,还可以向字典添加元素(必须同时添加键值对),方法如下:>>>dict['School']="GDPU";#增加新的元素>>>dict{'Class':'10','Age':30,'Name':'huang','School':'GDPU'}可以看到,新增加的键值对'School':'GDPU’已经成为字典的一个元素。8.2字典的创建和使用8.2.3字典的修改和删除8.2字典的创建和使用当要想删除字典中的其一个元素时,用del[多了一个空格]就行,其用法为[缺少标点符号]>>>deldict['Name'];#删除键是'Name'的元素>>>dict{'Class':'10','Age':30,'School':'GDPU'}从输出的结果可知,键为'Name'的元素已不在字典中了。还可以用dict.clear()来清空词典所有元素。>>>dict.clear()>>>dict{}[格式错乱,{}跑到阴影框的外面了]可知执行此操作后,字典为空。clear是一个原地操作的方法,使得dict中的内容全部被置空,里面所有的元素将被清除,成为一个空的字典。8.2字典的创建和使用当要想删除字典中的其一个元素时,用8.2字典的创建和使用8.2.3字典的遍历字典是一种特殊的集合,因此可以循环操作对其进行遍历。一般来说,对字典的遍历有如下几种形式。为了便于讲述,可以先建立一个字典。>>>mydict={'Name':'huang','Age':20,'Class':'10'}[建议把这段移动到开头位置,否则,把“如下几种形式”和后面的几种形式给断开了]1.遍历字典的key(键)>>>foriinmydict:print(i)输出结果为: ClassAgeName8.2字典的创建和使用8.2.3字典的遍历8.2字典的创建和使用2.遍历字典的value(值)>>>foriinmydict.values(): print(i)结果为:1020Huang可知,values()函数是对字典元素的值进行操作的,此程序中的变量i[变量i是否要斜体?全书要统一一下]对应字典中的每个元素的值。8.2字典的创建和使用2.遍历字典的value(值)8.2字典的创建和使用3.遍历字典的项(元素)>>>foriinmydict.items(): print(i)输出结果为字典的所有元素:('Class','10')('Age',20)('Name','huang')此程序中的变量i对应字典中的元素(包括健和值)8.2字典的创建和使用3.遍历字典的项(元素)8.2字典的创建和使用4.遍历字典的key-value>>>fori,jinmydict.items(): print(i,j)输出结果如下:Class10Age20Namehuang此程序中的变量i对应字典的键,变量j对应字典的值。8.2字典的创建和使用4.遍历字典的key-value8.3字典的基本操作8.3.1get函数:访问字典成员get()函数根据key获取值。>>>d={'one':1,'two':2,'three':3}>>>print(d.get('two'))2>>>print(d.get('four'))#字典d中没有'four'这个键输出结果为:None8.3字典的基本操作8.3.1get函数:访问字典成8.3字典的基本操作get函数可以访问字典中不存在的键,当该键不存在时返回None,读者可以参看前面所讲的用索引的方式来获取值,当键不存在时,系统会报错,这是两种方法获取字典元素值的区别。建议大家在从字典取值时,多用get()函数。8.3字典的基本操作get函数可以访问字典中不存在的键,8.3字典的基本操作8.3.2copy函数:返回一个具有相同键值的新字典>>>x={'one':1,'two':2,'three':3,'test':['a','b','c']}#创建一个字典x>>>print(x)#输出字典x{'one':1,'two':2,'test':['a','b','c'],'three':3}>>>y=x.copy()#用copy函数,将字典x复制到字典y中>>>print(y)#输出字典y{'one':1,'two':2,'test':['a','b','c'],'three':3}8.3字典的基本操作8.3.2copy函数:返回一个8.3字典的基本操作可以看到,用copy函数复制后,字典x和字典y具有相同的元素(键值对),y是x的一个副本。再看下面的操作:>>>y['three']=33#将字典y中键为'three'的元素值改为33>>>print(y){'one':1,'two':2,'test':['a','b','c'],'three':33}从输出结果中,可以看到已经成功修改。此时,再来看看字典x的情况。>>>print(x){'one':1,'two':2,'test':['a','b','c'],'three':3}当修改副本字典y中的值时,不会对原字典x产生影响。下面再做如下操作:>>>y['test'].remove('c')>>>y{'one':1,'two':2,'test':['a','b'],'three':3}>>>x{'one':1,'two':2,'test':['a','b'],'three':3}8.3字典的基本操作可以看到,用copy函数复制后,字典8.3字典的基本操作大家从输出结果可以看到,副本的操作影响到了原始字典。在复制的副本中对值进行替换后,对原来的字典不产生影响,但是如果修改了副本(如增、删操作),原始的字典也会被修改。deepcopy函数使用深复制,复制其包含所有的值,这个方法可以解决由于副本修改而使原始字典也变化的问题。deepcopy函数在使用前要导入,语法如下:>>>fromcopyimportdeepcopy>>>z=deepcopy(x)#使用deepcopy函数深度复制,注意与copy函数的区别>>>x{'one':1,'two':2,'test':['a','b','c'],'three':3}>>>z{'one':1,'two':2,'test':['a','b','c'],'three':3}8.3字典的基本操作大家从输出结果可以看到,副本的操作影8.3字典的基本操作8.3.3pop函数:删除字典中对应的键pop函数可以删除字典中的键及其对应的值。>>>d={'one':1,'two':2,'three':3}>>>d.pop('two')#删除键'two'2>>>print(d){'one':1,'three':3}运算结果显示键'two'及其对应的值都从字典中删除了。8.3字典的基本操作8.3.3pop函数:删除字典中8.3字典的基本操作8.3.4romkeys函数:用给定的键建立新的字典fromkeys函数可以用给定的键建立新的字典,键默认对应的值为None。>>>d=dict.fromkeys(['one','two','three'])>>>print(d)输出:{'one':None,'two':None,'three':None}可见,fromkeys函数用给定的键值’one','two','three',建立了一个新的字典,但是每个键所对应的值为None。8.3字典的基本操作8.3.4romkeys函数:用8.3字典的基本操作8.3.5setdefault函数:获取与给定键相关联的值类似于get方法,获取与给定键相关联的值,也可以在字典中不包含给定键的情况下设定相应的键值。>>>d={'one':1,'two':2,'three':3}>>>d.setdefault('four',4)4>>>print(d)运算结果:{'four':4,'one':1,'two':2,'three':3}8.3字典的基本操作8.3.5setdefault函8.3字典的基本操作8.3.6update函数:用一个字典更新另外一个字典update函数可以用一个字典来更新另外一个字典。操作如下:>>>d={'one':123,'two':2,'three':3}>>>print(d){'one':123,'two':2,'three':3}8.3字典的基本操作8.3.6update函数:用一8.3字典的基本操作8.3.7关键字in的应用在前面所学的章节中,我们已经对in关键字有了一定的认识,在字典中,可以用in关键字进行如下操作。创建一个字典d:>>>d={'one':123,'two':2,'three':3}8.3字典的基本操作8.3.7关键字in的应用8.3字典的基本操作1.用in关键字检查key是否存在>>>'one'ind.keys()True'one'是字典d中的一个键,所以返回True>>>'five'ind.keys()False'five'不是字典d的键,所以返回False2.用in关键字检查value是否存在>>>1ind.values()True1是字典d中的一个值,所以返回True>>>5ind.values()False5不是字典d的值,所以返回False。8.3字典的基本操作1.用in关键字检查key是否存8.4字典的格式化字符串在前面的学习中,我们知道格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python可以用一个元组将多个值传递给模板,每个值对应一个格式符。>>>print("I'm%s.I'm%dyearsold"%('huang',20))输出结果为:I'mhuang.I'm20yearsold8.4字典的格式化字符串8.3字典的基本操作还可以通过字典格式化字符串,Python中内置有对字符串进行格式化的操作%,在每个转换说明符中的%字符后面,加上键(要用圆括号括起来),后面再跟上其他说明元素。只要所有给出的键都能在字典中找到,就可以获得任意数量的转换说明符。>>>temple="I'm%(name)s,I'm%(age)d.%(name)sisastudent,heis%(age)d">>>student={'name':'huang','age':20}>>>print(temple%student)输出结果为:I'mhuang,I'm20.huangisastudent,heis208.3字典的基本操作还可以通过字典格式化字符串,Pyth8.5字典的排序8.5字典的排序Python中的字典反映的是一种映射关系,它在存储过程中是无序的,所以输出字典内容时也是无序的。在实际应用过程中,有时需要对字典进行一定程度的排序。Python中字典的排序分为按“键”排序和按“值”排序。下面分别进行讲述。这里创建一个字典d:>>>d={"ok":1,"no":2,'huang':12,'gg':11,'hh':13}>>>print(d){'no':2,'gg':11,'huang':12,'hh':13,'ok':1}从输出结果可看到,字典的输出是没有顺序的。8.5字典的排序8.5字典的排序8.5字典的排序8.5.1sorted函数按key值对字典排序现在,要对字典d按键进行排序,前提是,d的键是可排序的,我们查看字典d的键,都是字符串类型,因此是可以进行排序的。执行以下操作:>>>sorted(d.keys())['gg','hh','huang','no','ok']可知得到的是一个由字典所有键组成的一个列表序列。并没有反映出字典的映射关系。再执行以下程序:>>>sorted(d.items())[('gg',11),('hh',13),('huang',12),('no',2),('ok',1)]8.5字典的排序8.5.1sorted函数按key值8.5字典的排序8.5.2sorted函数按value值对字典排序对字典中的value进行排序,前提是value的类型是可排序的。对字典的value排序需要用到key参数,如果要对字典d按值的降序排列,进行如下操作:>>>sorted(d.items(),key=lambdae:e[1],reverse=True)[('hh',13),('huang',12),('gg',11),('no',2),('ok',1)]这里的d.items()实际上是将d转换为可迭代对象,迭代对象的元素为('hh',13),('huang',12),('gg',11),('no',2),('ok',1),items()方法将字典的元素转化为了元组,而这里key参数对应的lambda表达式:lambdae:e[1]的意思则是选取元组中的第二个元素作为比较参数,所以采用这种方法可以对字典的value进行排序。注意排序后的返回值是一个列表,而原字典中的键值对被转换为了list中的元组。8.5字典的排序8.5.2sorted函数按valu8.5字典的排序8.5.2sorted函数按value值对字典排序对字典中的value进行排序,前提是value的类型是可排序的。对字典的value排序需要用到key参数,如果要对字典d按值的降序排列,进行如下操作:>>>sorted(d.items(),key=lambdae:e[1],reverse=True)[('hh',13),('huang',12),('gg',11),('no',2),('ok',1)]这里的d.items()实际上是将d转换为可迭代对象,迭代对象的元素为('hh',13),('huang',12),('gg',11),('no',2),('ok',1),items()方法将字典的元素转化为了元组,而这里key参数对应的lambda表达式:lambdae:e[1]的意思则是选取元组中的第二个元素作为比较参数,所以采用这种方法可以对字典的value进行排序。注意排序后的返回值是一个列表,而原字典中的键值对被转换为了list中的元组。8.5字典的排序8.5.2sorted函数按valu8.6字典的实例应用【例8-1】读取一个英文文档,实现以下功能。(1)输出文档中出现的所有字母,并统计每个字母出现的次数。(2)输出文档中所有的单词,并找到出现频率最高的十个单词。(程序设计过程中,忽略字母的大小写)分析:(1)读取文件,用到open函数,假设现在在Python的安装目录下有英文文档,文件名为englishText.txt(2)文件成功读取之后,要完成各英文字母的统计,我们知道,英文字母一共是26个,有以下方案可以实现。①生成26个变量,每个变量对应一个字母,当读取过程中,出现某个字母时,其对应的变量增加1。这种设计可以完成对字母的统计,但过程比较烦琐,大家可自行完成。②生成一个具有26个元素的列表,将每个字母转化为相应的索引值,比如a->0,b->1,c->2……z->25,当出现某个字母时,其索引对应的值加1,这样也可以完成对字母的统计。8.6字典的实例应用【例8-1】读取一个英文文档,实现以8.6字典的实例应用建立一个tf.py文件,程序代码如下:1. testFile=open("englishText.txt","r")#读取文件2. zi=testFile.read()#read()函数是以单个字符的方式来返回3. lis=[0]*26#新建一个有26个元素的列表4. foriinzi:5. ifi.isalpha():#判断读取的字符是否为字母6. x=i.lower()#将读取的字母转化为小写7. lis[ord(x)-97]+=1#将列表的索引值与字母的ASCII码对应起来8. print(lis)9. testFile.close()输出结果为:[47,18,14,18,69,12,13,22,23,1,7,29,15,38,59,9,1,26,46,31,14,4,9,0,14,0]从结果可以知道,字母a出现了47次,字母b出现了18次,...,字母z出现了0次。8.6字典的实例应用建立一个tf.py文件,程序代码如下本章小结本章主要对Python中的字典进行了详细的介绍,字典是Python中最强大的数据类型之一,本章讲解了什么是字典、创建字典和为字典赋值、字典的基本操作、映射类型操作符、映射相关的函数、字典的方法等内容;并通过应用举例,深化字典的应用。本章小结本章主要对Python中的字典进行了详细的介绍第8章字典第8章字典内容提纲8.1什么是字典28.2字典的创建和使用38.3字典的基本操作4358.4字典的格式化字符串18.5字典的实例应用内容提纲8.1什么是字典28.2字典的创建和使用38引例引例假设有一种表格,第一列表示学号,第二列表示学号所对应的学生姓名,它们的关系一一对应现在想查找学号是20170001的学生,我们从表中对应的第二列,就能很方便地知道该学生的姓名是“张三”,如右表:20170001张三20170002李四20170003王五20170004赵六引例20170001张三20170002李四201700038.1什么是字典字典是Python语言中唯一的映射类型。映射类型对象里哈希值和指向的对象,通常被认为是可变的哈希表。字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。字典是Python中最强大的数据类型之一,它与列表、元组等其他序列类型的主要区别有以下几点。(1)存取和访问数据的方式不同。(2)映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。(3)映射类型用键直接“映射”到值。(4)字典支持索引操作(索引值为键值),但不支持切片操作,因为切片操作是针对索引值具有连续性,而字典的键不具备连续性。(5)字典中的键必须不可变且不重复,值可以是任何类型。8.1什么是字典字典是Python语言中唯一的映射类型。8.2字典的创建和使用字典就是用花括号{}包裹的键值对的集合(键值对有时也被称作项或元素)。在字典的创建过程中,要注意以下几点。(1)键与值之间用冒号“:”分开;(2)项与项之间用逗号“,”分开;(3)字典中的键必须是唯一的,而值可以不唯一。8.2字典的创建和使用字典就是用花括号{}包裹的键值对的8.2字典的创建和使用8.2.1直接创建字典创建一个空的字典:>>>mydict={}#创建一个空的字典>>>mydict#输出此字典的内容{}可知结果为空的。创建一个与引例相对应的字典:>>>student={20170001:'张三',20170002:'李四',/20170003:'王五',20170004:'赵六',}8.2字典的创建和使用8.2.1直接创建字典8.2字典的创建和使用8.2.2通过dict函数创建字典dict函数是字典类的构造函数,也可以利用此函数来创建字典。创建一个空字典:>>>dict(){}还可以传入键值对创建字典。>>>dict(a=1,b=2,c=3){'b':2,'a':1,'c':3}可以传入映射函数创建字典。>>>dict(zip(['a','b'],[1,2])){'b':2,'a':1}8.2字典的创建和使用8.2.2通过dict函数创建8.2字典的创建和使用8.2.2通过dict函数创建字典dict函数是字典类的构造函数,也可以利用此函数来创建字典。创建一个空字典:>>>dict(){}还可以传入键值对创建字典。>>>dict(a=1,b=2,c=3){'b':2,'a':1,'c':3}可以传入映射函数创建字典。>>>dict(zip(['a','b'],[1,2])){'b':2,'a':1}8.2字典的创建和使用8.2.2通过dict函数创建8.2字典的创建和使用还可以传入可迭代对象创建字典。>>>dict((('a',1),('b',2))){'b':2,'a':1}另外,也可以用dict函数,对字典进行如下操作:>>>mydict={'b':2,'a':1,'c':3}#定义一个字典mydict>>>a=dict(mydict)#将mydict作为dict函数的参数>>>print(a) #输出字典a{'b':2,'a':1,'c':3}在创建完一个字典后,可以利用len函数来获取字典的长度,也就是获取该字典中键值对的个数。下面求字典mydict的长度。>>>len(mydict)3得到的结果为3,说明此字典中包含了3个键值对。8.2字典的创建和使用还可以传入可迭代对象创建字典。8.2字典的创建和使用8.2.3字典的修改和删除修改字典中已存在元素的值,操作如下:>>>dict={'Name':'huang','Age':20,'Class':'10'}>>>dict['Age']=30;#将键'Age'所对应的值改为30>>>dict{'Class':'10','Age':30,'Name':'huang'}在实际操作过程中,还可以向字典添加元素(必须同时添加键值对),方法如下:>>>dict['School']="GDPU";#增加新的元素>>>dict{'Class':'10','Age':30,'Name':'huang','School':'GDPU'}可以看到,新增加的键值对'School':'GDPU’已经成为字典的一个元素。8.2字典的创建和使用8.2.3字典的修改和删除8.2字典的创建和使用当要想删除字典中的其一个元素时,用del[多了一个空格]就行,其用法为[缺少标点符号]>>>deldict['Name'];#删除键是'Name'的元素>>>dict{'Class':'10','Age':30,'School':'GDPU'}从输出的结果可知,键为'Name'的元素已不在字典中了。还可以用dict.clear()来清空词典所有元素。>>>dict.clear()>>>dict{}[格式错乱,{}跑到阴影框的外面了]可知执行此操作后,字典为空。clear是一个原地操作的方法,使得dict中的内容全部被置空,里面所有的元素将被清除,成为一个空的字典。8.2字典的创建和使用当要想删除字典中的其一个元素时,用8.2字典的创建和使用8.2.3字典的遍历字典是一种特殊的集合,因此可以循环操作对其进行遍历。一般来说,对字典的遍历有如下几种形式。为了便于讲述,可以先建立一个字典。>>>mydict={'Name':'huang','Age':20,'Class':'10'}[建议把这段移动到开头位置,否则,把“如下几种形式”和后面的几种形式给断开了]1.遍历字典的key(键)>>>foriinmydict:print(i)输出结果为: ClassAgeName8.2字典的创建和使用8.2.3字典的遍历8.2字典的创建和使用2.遍历字典的value(值)>>>foriinmydict.values(): print(i)结果为:1020Huang可知,values()函数是对字典元素的值进行操作的,此程序中的变量i[变量i是否要斜体?全书要统一一下]对应字典中的每个元素的值。8.2字典的创建和使用2.遍历字典的value(值)8.2字典的创建和使用3.遍历字典的项(元素)>>>foriinmydict.items(): print(i)输出结果为字典的所有元素:('Class','10')('Age',20)('Name','huang')此程序中的变量i对应字典中的元素(包括健和值)8.2字典的创建和使用3.遍历字典的项(元素)8.2字典的创建和使用4.遍历字典的key-value>>>fori,jinmydict.items(): print(i,j)输出结果如下:Class10Age20Namehuang此程序中的变量i对应字典的键,变量j对应字典的值。8.2字典的创建和使用4.遍历字典的key-value8.3字典的基本操作8.3.1get函数:访问字典成员get()函数根据key获取值。>>>d={'one':1,'two':2,'three':3}>>>print(d.get('two'))2>>>print(d.get('four'))#字典d中没有'four'这个键输出结果为:None8.3字典的基本操作8.3.1get函数:访问字典成8.3字典的基本操作get函数可以访问字典中不存在的键,当该键不存在时返回None,读者可以参看前面所讲的用索引的方式来获取值,当键不存在时,系统会报错,这是两种方法获取字典元素值的区别。建议大家在从字典取值时,多用get()函数。8.3字典的基本操作get函数可以访问字典中不存在的键,8.3字典的基本操作8.3.2copy函数:返回一个具有相同键值的新字典>>>x={'one':1,'two':2,'three':3,'test':['a','b','c']}#创建一个字典x>>>print(x)#输出字典x{'one':1,'two':2,'test':['a','b','c'],'three':3}>>>y=x.copy()#用copy函数,将字典x复制到字典y中>>>print(y)#输出字典y{'one':1,'two':2,'test':['a','b','c'],'three':3}8.3字典的基本操作8.3.2copy函数:返回一个8.3字典的基本操作可以看到,用copy函数复制后,字典x和字典y具有相同的元素(键值对),y是x的一个副本。再看下面的操作:>>>y['three']=33#将字典y中键为'three'的元素值改为33>>>print(y){'one':1,'two':2,'test':['a','b','c'],'three':33}从输出结果中,可以看到已经成功修改。此时,再来看看字典x的情况。>>>print(x){'one':1,'two':2,'test':['a','b','c'],'three':3}当修改副本字典y中的值时,不会对原字典x产生影响。下面再做如下操作:>>>y['test'].remove('c')>>>y{'one':1,'two':2,'test':['a','b'],'three':3}>>>x{'one':1,'two':2,'test':['a','b'],'three':3}8.3字典的基本操作可以看到,用copy函数复制后,字典8.3字典的基本操作大家从输出结果可以看到,副本的操作影响到了原始字典。在复制的副本中对值进行替换后,对原来的字典不产生影响,但是如果修改了副本(如增、删操作),原始的字典也会被修改。deepcopy函数使用深复制,复制其包含所有的值,这个方法可以解决由于副本修改而使原始字典也变化的问题。deepcopy函数在使用前要导入,语法如下:>>>fromcopyimportdeepcopy>>>z=deepcopy(x)#使用deepcopy函数深度复制,注意与copy函数的区别>>>x{'one':1,'two':2,'test':['a','b','c'],'three':3}>>>z{'one':1,'two':2,'test':['a','b','c'],'three':3}8.3字典的基本操作大家从输出结果可以看到,副本的操作影8.3字典的基本操作8.3.3pop函数:删除字典中对应的键pop函数可以删除字典中的键及其对应的值。>>>d={'one':1,'two':2,'three':3}>>>d.pop('two')#删除键'two'2>>>print(d){'one':1,'three':3}运算结果显示键'two'及其对应的值都从字典中删除了。8.3字典的基本操作8.3.3pop函数:删除字典中8.3字典的基本操作8.3.4romkeys函数:用给定的键建立新的字典fromkeys函数可以用给定的键建立新的字典,键默认对应的值为None。>>>d=dict.fromkeys(['one','two','three'])>>>print(d)输出:{'one':None,'two':None,'three':None}可见,fromkeys函数用给定的键值’one','two','three',建立了一个新的字典,但是每个键所对应的值为None。8.3字典的基本操作8.3.4romkeys函数:用8.3字典的基本操作8.3.5setdefault函数:获取与给定键相关联的值类似于get方法,获取与给定键相关联的值,也可以在字典中不包含给定键的情况下设定相应的键值。>>>d={'one':1,'two':2,'three':3}>>>d.setdefault('four',4)4>>>print(d)运算结果:{'four':4,'one':1,'two':2,'three':3}8.3字典的基本操作8.3.5setdefault函8.3字典的基本操作8.3.6update函数:用一个字典更新另外一个字典update函数可以用一个字典来更新另外一个字典。操作如下:>>>d={'one':123,'two':2,'three':3}>>>print(d){'one':123,'two':2,'three':3}8.3字典的基本操作8.3.6update函数:用一8.3字典的基本操作8.3.7关键字in的应用在前面所学的章节中,我们已经对in关键字有了一定的认识,在字典中,可以用in关键字进行如下操作。创建一个字典d:>>>d={'one':123,'two':2,'three':3}8.3字典的基本操作8.3.7关键字in的应用8.3字典的基本操作1.用in关键字检查key是否存在>>>'one'ind.keys()True'one'是字典d中的一个键,所以返回True>>>'five'ind.keys()False'five'不是字典d的键,所以返回False2.用in关键字检查value是否存在>>>1ind.values()True1是字典d中的一个值,所以返回True>>>5ind.values()False5不是字典d的值,所以返回False。8.3字典的基本操作1.用in关键字检查key是否存8.4字典的格式化字符串在前面的学习中,我们知道格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python可以用一个元组将多个值传递给模板,每个值对应一个格式符。>>>print("I'm%s.I'm%dyearsold"%('huang',20))输出结果为:I'mhuang.I'm20yearsold8.4字典的格式化字符串8.3字典的基本操作还可以通过字典格式化字符串,Python中内置有对字符串进行格式化的操作%,在每个转换说明符中的%字符后面,加上键(要用圆括号括起来),后面再跟上其他说明元素。只要所有给出的键都能在字典中找到,就可以获得任意数量的转换说明符。>>>temple="I'm%(name)s,I'm%(age)d.%(name)sisastudent,heis%(age)d">>>student={'name':'huang','age':20}>>>print(temple%student)输出结果为:I'mhuang,I'm20.huangisastudent,heis208.3字典的基本操作还可以通过字典格式化字符串,Pyth8.5字典的排序8.5字典的排序Python中的字典反映的是一种映射关系,它在存储过程中是无序的,所以输出字典内容时也是无序的。在实际应用过程中,有时需要对字典进行一定程度的排序。Python中字典的排序分为按“键”排序和按“值”排序。下面分别进行讲述。这里创建一个字典d:>>>d={"ok":1,"no":2,'huang':12,'gg':11,'hh':13}>>>print(d){'no':2,'gg':11,'huang':12,'hh':13,'ok':1}从输出结果可看到,字典的输出是没有顺序的。8.5字典的排序8.5字典的排序8.5字典的排序8.5.1sorted函数按key值对字典排序现在,要对字典d按键进行排序,前提是,d的键是可排序的,我们查看字典d的键,都是字符串类型,因此是可以进行排序的。执行以下操作:>>>sorted(d.keys())['gg','hh','huang','no','ok']可知得到的是一个由字典所有键组成的一个列表序列。并没有反映出字典的映射关系。再执行以下程序:>>>sorted(d.items())[('gg',11),('hh',13),('huang',12),('no',2),('ok',1)]8.5字典的排序8.5.1sorted函数按key值8.5字典的排序8.5.2sorted函数按value值对字典排序对字典中的value进行排序,前提是value的类型是可排序的。对字典的value排序需要用到key参数,如果要对字典d按值的降序排列,进行如下操作:>>>sorted(d.items(),key=lambdae:e[1],reverse=True)[('hh',13),
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 炼焦煤制备工班组建设模拟考核试卷含答案
- 涂料合成树脂工操作知识测试考核试卷含答案
- 糖坯制造工操作技能水平考核试卷含答案
- 特种禽类饲养员岗前工艺分析考核试卷含答案
- 轮轴装修工安全文化模拟考核试卷含答案
- 船舶客运员操作管理模拟考核试卷含答案
- 铁路交通行业招聘面试技巧
- 2026年大学大四(智能制造工程)智能生产线调试技术测试题及答案
- 电视节目制片人面试全解析及经验
- 企业财务经理的职责与招聘要点分析
- 公路建设表土剥离管理方案
- 2024年可行性研究报告投资估算及财务分析全套计算表格(含附表-带只更改标红部分-操作简单)
- JGJ31-2003 体育建筑设计规范
- 2024年河南省信阳市事业单位招聘考试(职业能力倾向测验)题库学生专用
- 农贸市场营销策划方案
- 【可行性报告】2023年高纯氮化铝粉体行业项目可行性分析报告
- 营养支持讲课最终课件
- 出口海运工厂集装箱货物绑扎加固指南
- 电动机检修作业指导书
- TS30测量机器人Geocom中文说明书
- 化工厂监控系统解决方案
评论
0/150
提交评论