Python基础第七讲怎么理解字典呢
字典是另外一个可变的数据结构,且可存储任意类型对象,比如字符串、数字、列表等。字典是由关键字和值两部分组成,也就是key和value,中间用冒号分隔。这种结构类似于新华字典,字典中每一个字都有一个对应的解释,具体语法如下:
语法:
字典名={关键字1:值,关键字:值,关键字:值}
每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。
键必须独一无二,但值则不必。可以有任意多个键值对
值可以取任何数据类型,但键必须是不可变的,如字符串,数或元组。
例子:
#构建一个字典,记录各宫嫔妃的年薪银子
name_dictionary={魏璎珞:00,皇后:,皇贵妃:,贵妃:,斌:00}
print(name_dictionary)
print(字典的数据类型表示是:,type(name_dictionary))
{魏璎珞:00,皇后:,皇贵妃:,贵妃:,斌:00}
字典的数据类型表示是:classdict
.5.字典特性字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。两个重要的点需要记住:
1.不允许同一个键出现两次:创建时如果同一个键被赋值两次,后一个值会被记住。
例子
#定义两个同样的关键字Namedict={Name:Python,Age:7,Name:Java}print("dict[Name]:",dict[Name])
dict[Name]:ManniJava
.键必须不可变:所以可以用数,字符串或元组充当,所以用列表就不行
例子
#关键字Name为列表dict={[Name]:Python,Age:7};print("dict[Name]:",dict[Name])
File"/Users/yoni.ma/PycharmProjects/seven_days_python/Forth_day_strcure/dict_p.py",line,inmodule
dict[Name]:Java
dict={[Name]:Python,Age:7};
TypeError:unhashabletype:list
.5.字典的基本操作字典在python中的类型表示是classdict。当查看到变量的类型是dict,则可以对其进行字典的操作。常见的字典操作是访问字典、遍历字典等。这些操作在实际项目中经常被使用到,比如excel文件读入内存以后,按照字典的方法存放。然后对其增加或删除值。
1.访问字典访问字典也就是获取关键字对应的值,方法是指定字典名和放在方括号内的关键字,具体如下。获取后的值可以赋值给变量。
语法:
变量名=字典名[关键字]
例子
#访问字典
weiyingluo=name_dictionary[魏璎珞]
print(f魏璎珞的年薪是:{weiyingluo}两)
魏璎珞的年薪是:00两
.添加键值对字典是一种可变的数据结构,可以随时添加或者删除其中的键值对。其中添加键值的方法是,指定字典名、用方括号括起的键和相关的值,具体如下。
语法:
字典名[关键字名]=值
例子
#增加贵人和常在的年薪银子
print(f原来的后宫年薪字典是:{name_dictionary})
name_dictionary[贵人]=
name_dictionary[常在]=50
print(F增加键值后的后宫年薪字典变成:{name_dictionary})
原来的后宫年薪字典是:{魏璎珞:00,皇后:,皇贵妃:,贵妃:,斌:00}
增加键值后的后宫年薪字典变成:{魏璎珞:00,皇后:,皇贵妃:,贵妃:,斌:00,贵人:,常在:50}
.修改键值对如果字典中的值不是我们想要的,可以通过修改的方法达到。以此指定字典名、用方括号括起的键以及与该键相对应的新值。
语法:
字典名[关键字名]=新的值
例子
#修改字典的值,比如修改常在的年薪为70两
print(常在原来的年薪是{}两.format(name_dictionary[常在]))
name_dictionary[常在]=70
change_changzai=name_dictionary[常在]
print(f常在修改后的年薪是{change_changzai}两)
常在原来的年薪是50两
常在修改后的年薪是70两
删除键值对如果字典中的键值对不再需要,我们可以彻底删除。Python使用的是del语句,必须要指定要删除的字典名和关键字。注意是永久删除
语法:
del字典名[关键字]
例子
#删除字典中的键值对,比如删除常在
delname_dictionary[常在]
print(f删除常在后的后宫嫔妃年薪字典变成:{name_dictionary})
删除常在后的后宫嫔妃年薪字典变成:{魏璎珞:00,皇后:,皇贵妃:,贵妃:,斌:00,贵人:}
如果我们还需要用到被删除的键值对,则我们使用pop(‘键的名字’)方法。该方法是删除字典给定键所对应的值,并且返回该值。
print(原来的字典是:,name_dictionary)#使用pop方法删除魏璎珞name_pop=name_dictionary.pop(魏璎珞)#使用删除后的值print(魏璎珞的年薪是:,name_pop)print(使用pop方法删除后的字典是:,name_dictionary)
原来的字典是:{魏璎珞:00,皇后:,皇贵妃:,贵妃:,斌:00,贵人:}
魏璎珞的年薪是:00
使用pop方法删除后的字典是:{皇后:,皇贵妃:,贵妃:,斌:00,贵人:}
除了pop()方法以外,Python中还有一个popitem()方法。它可以随机删除字典中的一对(一般删除末尾一对),并且可以被后续的程序使用。我们经常用此方法逐个删除字典中的所有键值对。
#随机删除字典中的一对pop_name=name_dictionary.popitem()print(使用popitem删除的是:,pop_name)print(随机删除字典中一对键值对后:,name_dictionary)pop_name=name_dictionary.popitem()print(再次使用popitem删除的是:,pop_name)print(再次随机删除字典中一对键值对后:,name_dictionary)
使用popitem删除的是:(贵人,)
随机删除字典中一对键值对后:{皇后:,皇贵妃:,贵妃:,斌:00}
再次使用popitem删除的是:(斌,00)
再次随机删除字典中一对键值对后:{皇后:,皇贵妃:,贵妃:}
如果需要删除所有的键值对,我们可以使用clear()方法清空所有的数据。但是需要注意del语句是删除字典,此时打印删除后的字典则出错。两者是有区别的。
#clear()方法清除字典中的所有数据print(原来字典的长度是:,len(name_dictionary))name_dictionary.clear()print(使用clear清除字典中的所有内容:,name_dictionary)print(清空以后字典的长度是:,len(name_dictionary))#使用del删除字典delname_dictionary#字典已经被删除,则再次打印则出错:namename_dictionaryisnotdefinedprint(name_dictionary)
原来字典的长度是:
使用clear清除字典中的所有内容:{}
清空以后字典的长度是:0
Traceback(mostrecentcalllast):
File"/Users/seven_days_python/Forth_day_strcure/dict_p.py",line19,inmodule
print(name_dictionary)
NameError:namename_dictionaryisnotdefined
5.创建空字典在实际项目中,我们可能不知道字典中存放的内容是什么。这时,我们可以采用从空的字典开始动态创建,也就是在程序运行的时候添加具体的内容。
常见的使用场景是:第一个:需要用户输入数据存储为字典;第二个是自动生成大量的键值对,比如爬虫,爬取豆瓣电影的排名信息。我们可以把排名放入空的字典中,然后每次爬取一个电影,添加一个对应的键值对。
例子
#从空的字典开始创建
douban_movies={}#定义空的字典
douban_movies[排名]=1
douban_movies[片名]=霸王别姬
douban_movies[主演]=张国荣、张丰毅、巩俐
douban_movies[导演]=陈凯歌
print(从空的列表中构建字典:,douban_movies)
从空的列表中构建字典:{排名:1,片名:霸王别姬,主演:张国荣、张丰毅、巩俐,导演:陈凯歌}
.5.内置字典函数与方法Python字典包含了很多内置函数和方法,部分如下所示。这些函数或者方法不需要死记硬背,用到的时候去网络或书中查找即可。
内置函数
cmp(dict1,dict)#比较两个字典元素。
len(dict)#计算字典元素个数,即键的总数。
str(dict)#输出字典可打印的字符串表示。
内置方法
字典名.clear()#删除字典内所有元素
字典名.copy()#返回一个字典的浅复制
字典名.fromkeys()#创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
字典名.get(key,default=None)#返回指定键的值,如果值不在字典中返回default值
字典名.items()#以列表返回可遍历的(键,值)元组数组
字典名.keys()#以列表返回一个字典所有的键
字典名.setdefault(key,default=None)#和get()类似,但如果键不已经存在于字典中,将会添加键并将值设为default
字典名.update(dict)#把字典dict的键/值对更新到dict里
字典名.values()#以列表返回字典中的所有值
例子
#内置函数和方法
print(计算字典的个数:,len(name_dictionary))
print(输出字典可以打印的字符串,str(name_dictionary))
#内置函数
print(返回指定的贵妃的年薪,name_dictionary.get(贵妃))
print(以列表的形式返回字典中的所有关键字,,name_dictionary.keys())#经常被用到
print(以元组形式返回所有的键值对,name_dictionary.items())#经常被用到
print(返回键值中的所有值,name_dictionary.values())#经常被用到
计算字典的个数:6
输出字典可以打印的字符串{魏璎珞:00,皇后:,皇贵妃:,贵妃:,斌:00,贵人:}
返回指定的贵妃的年薪
以列表的形式返回字典中的所有关键字,dict_keys([魏璎珞,皇后,皇贵妃,贵妃,斌,贵人])
以元组形式返回所有的键值对dict_items([(魏璎珞,00),(皇后,),(皇贵妃,),(贵妃,),(斌,00),(贵人,)])
返回键值中的所有值dict_values([00,,,,00,])
在所有内置方法中,update()方法经常被用来合并两个字典。如果传给update方法的数据也含有相同的键,则它的值将被覆盖。
new_dictionary={皇后:,皇贵妃:,贵妃:}print(第一个字典:,new_dictionary)name={魏璎珞:00,贵人:}print(第二个字典:,name)#使用update方法合并两个字典new_dictionary.update(name)print(使用update方法合并两个字典:,new_dictionary)#如果有重复的值则替换name_new={皇后:,贵人:}#使用update方法合并两个字典new_dictionary.update(name_new)print(使用update方法合并两个字典:,new_dictionary)
第一个字典:{皇后:,皇贵妃:,贵妃:}
第二个字典:{魏璎珞:00,贵人:}
使用update方法合并两个字典:{皇后:,皇贵妃:,贵妃:,魏璎珞:00,贵人:}
使用update方法合并两个字典:{皇后:,皇贵妃:,贵妃:,魏璎珞:00,贵人:}
.6结合字典与列表字典和列表是python中经常用到的两个数据结构,并且都是可变的。有时候,我们需要把两者结合起来使用。把一系列字典存储在列表中,或将列表作为值放在字典中,这称为嵌套。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。这在项目中经常用到。
什么时候用列表什么时候用字典呢?面对这个问题笔者的想法是,当你存取的数据类型都是一样的时候,使用列表,当你存取的数据类型不一样时就用字典。这里说明一下数据类型不一样不是指整形或者字符型。举个例子:如果你需要存很多人的姓名,仅仅这一个属性,就用列表来进行处理,当你要存取不仅仅是人名,包括年龄,性别,国籍等等这些信息时,这时候用字典是最合适的。
.6.1字典列表列表中的元素都是字典为字典列表。一般用在列表的元素信息比较复杂,单一的字符串不能满足。
例子
#两个字典合并为一个列表dict_1={name:Python,age:18}dict_={name:Java,age:unknown}name_list=[dict_1,dict_]print(name_list)print(类型是:,type(name_list))
[{name:Python,age:18},{name:Java,age:unknown}]
类型是:classlist
.6.在字典中存储列表字典中的值有时候不是一个,而是多个。这时需要把字典中的值变成一个列表,而不是单个的值。
例子
#字典中存储列表
favorite_actor={
魏璎珞:[傅恒,皇上,富察皇后],
皇上:[魏璎珞,富察皇后,纯妃,高贵妃],
高贵妃:皇上
}
print(favorite_actor)
print(类型是,type(favorite_actor))
结果为:
{魏璎珞:[傅恒,皇上,富察皇后],皇上:[魏璎珞,富察皇后,纯妃,高贵妃],高贵妃:皇上}
类型是classdict
.6.在字典中存储字典字典的值也可以是字典,称为字典中存储字典。一般用在键对应的值是二维的信息,比如登录某一个网站的用户信息,用户名是键,用户名对应的值比较部分,既包括用户的地址、职业、收入等信息。
例子
#字典中存储字典
users={
爱上不该爱的人:{
姓名:魏璎珞,
职位:"妃子",
年薪:00两,},
只爱皇上:{
姓名:高贵妃,
职位:贵妃,
年薪:两,}
}
print(users)
print(类型是,type(users))
{爱上不该爱的人:{姓名:魏璎珞,职位:妃子,年薪:00两},只爱皇上:{姓名:高贵妃,职位:贵妃,年薪:两}}
类型是classdict
以上内容摘自《零基础轻松学Python》
零基础学Python,看下嘛
只需7天时间,跨进Python编程大门,已有+加入
0基础入门python,小时有人快速解答问题;0多个项目实战,老手可以从真实场景中学习python;不定期直播项目案例讲解,手把手教你如何分析项目;优质python学习资料分享,让你在最短时间获得有价值的学习资源;圈友优质资料或学习分享,会不时给予赞赏支持,希望每个优质圈友既能赚回加入费用,也能快速成长,并享受分享与帮助他人的乐趣。收获一群志同道合的朋友,并且都是python从业者本着布道思想,只需69元加入一个能保证学习效果的良心圈子。
价值元0基础入门在线课程,免费送给圈友们,供巩固
预览时标签不可点收录于话题#个上一篇下一篇转载请注明:http://www.sonphie.com/jbzl/13840.html