Python基础第七讲怎么理解字典呢

北京白癜风介绍 https://baike.baidu.com/item/%e5%8c%97%e4%ba%ac%e4%b8%ad%e7%a7%91%e7%99%bd%e7%99%9c%e9%a3%8e%e5%8c%bb%e9%99%a2/9728824?fr=aladdin
.5.1什么是字典

字典是另外一个可变的数据结构,且可存储任意类型对象,比如字符串、数字、列表等。字典是由关键字和值两部分组成,也就是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

  • 上一篇文章:
  • 下一篇文章:
  • 网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

    当前时间: