Python学习08:揭开字典的神秘面纱

笔者:风起怨江南 出处:https://blog.csdn.net/JackMengJin 笔者原创,文章欢迎转载,如果喜欢请点赞+关注,感谢支持!


目录

一、字典的定义

二、访问和修改字典

2.1 访问字典中的值

2.2 添加键——值对

2.3 修改字典中的值

2.4 删除值——键对

2.5 字典和列表

三、遍历字典

3.2 遍历字典中所有键

3.3 遍历字典中所有值

由于篇幅问题,字典的学习会分两讲完成,剩余内容会在《Python学习09》讲中再具体讲解,敬请期待。


揭开字典的神秘面纱

揭开面纱之前,先来看一下在Python里字典的简单实例。

#揭开字典的奥秘
dict0 = {}
print(type(dict0))
print(dict0)
<class 'dict'>
{}

字典在Pyhton里一直是比较神秘的存在,几乎所有的学习网站、Python相关的数据都会把字典放在最后几章节来讲,新手刚接触字典时会认为非常复杂。其实想要真正的理解并使用字典并不难。下面就跟随我的脚步,一起来揭开Python字典的神秘面纱

想象一种场景:老师手上有两个列表,列表里面分别保存了两组数据,一个列表的数据里是学生的名字,另外一个列表的数据里是学生对应的座位

之前的学习中,已经讲过列表->序列的概念和列表的用法,列表可以保存学生名字对应座位的两组数据,但列表之间是不具备任何的关联关系。

而Python中字典就提供了保存具有映射关系数据的能力,把两组毫无联系的数据关联起来。

 

一、字典的定义

字典是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据。同时字典是另一种可变容器模型,且可存储任意类型对象。

在Python中,字典是一系列键——值对

一组数据是关键数据,被称为键,也就是key;

另一组数据可通过key来访问,被称为值,也就是value。

下文中经常会混合键和key来使用,请注意代表是一个意思。

每一个键都与一个值相关联,你可以使用键来访问与之相关联的值。

相关联的值可以是数字、字符串、列表,乃至字典

事实上任何Python对象用作字都可以用作字典中的值(非常强大)。

但需要注意的是:由于字典中的 key 是非常关键的数据,而且程序需要通过 key 来访问 value,因此字典中的 key 不允许重复。

  • 字典的结构

字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:

dict = {key1 : value1, key2 : value2 }

需要注意的是:字典里可以取任何数据类型但键必须是不可变的,如字符串,数字或元组。

  • 字典的类型

字典的类型就是dict,所以也可以使用dict()函数来创建字典。

<class 'dict'>

二、访问和修改字典

首先创建一个字典,字典内容包含姓名、年龄、性别、身高、体重等数据信息:

#揭开字典的奥秘
dict_man = {'name':'Jack','age':26,'sex':'male','height':184,'weight':80}
print(type(dict_man))
print(dict_man)
<class 'dict'>
{'name': 'Jack', 'age': 26, 'sex': 'male', 'height': 184, 'weight': 80}

字典里姓名、年龄、性别、身高、体重就是键,也称之为key;而 Jack, 26, male, 184,80这些就是值,也称之为value

2.1 访问字典中的值

要获取与键相关联的值,可依次指定字典名和放在方括号内的键

#揭开字典的奥秘
dict_man = {'name':'Jack','age':26,'sex':'male','height':184,'weight':80}
print(dict_man)
print(dict_man['name'])
print(type(dict_man['name']))
{'name': 'Jack', 'age': 26, 'sex': 'male', 'height': 184, 'weight': 80}
Jack
<class 'str'>

访问:字典名[键]

2.2 添加键——值对

字典是一种动态结构,可随时在其中添加键——值对key-value)。

要添加键——值只需为不存在的key赋值即可:对可依次指定字典名、用方括号扩起的键和相关联的值。

还是利用上面创建的字典,在字典中添加两项信息:爱好——python、职业——自动化测试:

#揭开字典的奥秘
dict_man = {'name':'Jack','age':26,'sex':'male','height':184,'weight':80}
print(dict_man)
dict_man['hobby'] = 'python'
dict_man['job'] = 'automated testing'
print(dict_man)
{'name': 'Jack', 'age': 26, 'sex': 'male', 'height': 184, 'weight': 80}
{'name': 'Jack', 'age': 26, 'sex': 'male', 'height': 184, 'weight': 80, 'hobby': 'python', 'job': 'automated testing'}

通过运行代码可以看到,键——值对已经添加成功。

所以,对不存在的key赋值,就是增加键——值对(和列表的不同)。

而通常我们在使用字典时,往往是创建一个空的字典,再分别添加各个键——值对:

dict_fav = {}
dict_fav['fruit'] = 'apple'
dict_fav['color'] = 'red'
print(dict_fav)
{'fruit': 'apple', 'color': 'red'}

使用字典来存储用户提供的数据或在编写能自动生成大量键——值对的代码时,通常最好先定义一个空字典。

2.3 修改字典中的值

讲完访问和新值,就要讲下如何修改字典中的值。先创建一个空的字典,再添加水果——苹果,颜色——红色,再对水果和颜色进行修改:

dict_fav = {}
dict_fav['fruit'] = 'apple'
dict_fav['color'] = 'red'
print(dict_fav)
dict_fav['fruit'] = 'orange'
dict_fav['color'] = 'yellow'
print(dict_fav)
{'fruit': 'apple', 'color': 'red'}
{'fruit': 'orange', 'color': 'yellow'}

可以看到,在字典里,对已经存在的键——值对赋值,新的值就会覆盖原有的值。

所以修改字典的值就是覆盖原有的值。

2.4 删除值——键对

对于字典中不再需要的信息,可使用del语句将相应的键——值对彻底删除

比如将个人身高和体重的数据删除:

dict_man = {'name':'Jack','age':26,'sex':'male','height':184,'weight':80}
print(dict_man)
dict_man['hobby'] = 'python'
dict_man['job'] = 'automated testing'
print(dict_man)
#删除身高和体重的键
del dict_man['height']
del dict_man['weight']
print(dict_man)
{'name': 'Jack', 'age': 26, 'sex': 'male', 'height': 184, 'weight': 80}
{'name': 'Jack', 'age': 26, 'sex': 'male', 'height': 184, 'weight': 80, 'hobby': 'python', 'job': 'automated testing'}
{'name': 'Jack', 'age': 26, 'sex': 'male', 'hobby': 'python', 'job': 'automated testing'}

在字典中,删除键——值对使用del语句。

2.5 字典和列表

通过上面的例子可以看出,字典的 key 是它的关键。换个角度来看,字典的键就相当于它的索引,只不过这些索引不一定是整数类型,字典的键可以是任意不可变类型。

所以可以这样说,字典相当于索引是任意不可变类型的列表而列表则相当于 key 只能是整数的字典。

因此,如果程序中要使用的字典的 key 都是整数类型,可以考虑换成列表。

此外,还有一点需要指出,列表的索引总是从 0 开始、连续增大的;但字典的索引即使是整数类型,也不需要从 0 开始,而且不需要连续。因此,列表不允许对不存在的索引赋值。

字典允许直接对不存在的键赋值,这样就会为字典增加一个键——值对。

列表不允许对不存在的索引赋值,但字典则允许直接对不存在的 key 赋值。

三、遍历字典

在之间的学习中已经掌握了for循环,那么如何遍历字典呢?

字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键——值对、键或值。

3.1 遍历所有的键——值对

dict_man = {'name':'Jack','age':'26','sex':'male','height':'184','weight':'80'}
dict_man['hobby'] = 'python'
dict_man['job'] = 'automated testing'
print(dict_man)
for key,value in dict_man.items():
    print('Key: ' + key)
    print('Value: ' + value)
{'fruit': 'apple', 'color': 'red'}
{'fruit': 'orange', 'color': 'yellow'}
{'color': 'yellow'}
{'name': 'Jack', 'age': '26', 'sex': 'male', 'height': '184', 'weight': '80', 'hobby': 'python', 'job': 'automated testing'}
Key: name
Value: Jack
Key: age
Value: 26
Key: sex
Value: male
Key: height
Value: 184
Key: weight
Value: 80
Key: hobby
Value: python
Key: job
Value: automated testing

for循环遍历字典,可声明两个变量,用于存储键——值对。

而字典名后加方法items(),它表示返回一个键——值对列表。for循环依次将每个键——值对存储到制定的两个变量中。

3.2 遍历字典中所有键

在不需要使用字典中的值时,只需要键的情况下,使用方法keys()

dict_man = {'name':'Jack','age':'26','sex':'male','height':'184','weight':'80'}
dict_man['hobby'] = 'python'
dict_man['job'] = 'automated testing'
print(dict_man)
for key in dict_man.keys():
    print('Key: ' + key)
Key: name
Key: age
Key: sex
Key: height
Key: weight
Key: hobby
Key: job

在例子中,Pyhton提取字典dict_man中所有的键,并依次将它们存储到变量key中,最后打印输出。

其实方法keys()并非只能用于遍历,实际上它返回了一个列表,其中包含了字典中所有的键,所以还可以使用keys()来确定是否存在某个键:

dict_man = {'name':'Jack','age':'26','sex':'male','height':'184','weight':'80'}
dict_man['hobby'] = 'python'
dict_man['job'] = 'automated testing'
print(dict_man)
if not 'book' in dict_man.keys():
    print('字典里没有book这个键。')
{'name': 'Jack', 'age': '26', 'sex': 'male', 'height': '184', 'weight': '80', 'hobby': 'python', 'job': 'automated testing'}
字典里没有book这个键。

3.3 遍历字典中所有值

只对字典中的值遍历,使用方法values(),同样的,它返回一个值列表,不包括任何键:

dict_man = {'name':'Jack','age':'26','sex':'male','height':'184','weight':'80'}
dict_man['hobby'] = 'python'
dict_man['job'] = 'automated testing'
print(dict_man)
for value in dict_man.values():
    print('Value: ' + value)
Value: Jack
Value: 26
Value: male
Value: 184
Value: 80
Value: python
Value: automated testing

同样的,也是可以使用方法values()来确定是否存在某个值:

dict_man = {'name':'Jack','age':'26','sex':'male','height':'184','weight':'80'}
dict_man['hobby'] = 'python'
dict_man['job'] = 'automated testing'
print(dict_man)
if not 'Jack' in dict_man.values():
    print('字典里没有Jack这个值。')
else:
    print('字典里存在Jack这个值。')
{'name': 'Jack', 'age': '26', 'sex': 'male', 'height': '184', 'weight': '80', 'hobby': 'python', 'job': 'automated testing'}
字典里存在Jack这个值。

更多遍历字典的细节会在下一讲中再详细讲解。

下一讲中还会讲到字典的嵌套、字典的常用函数、字典的实战训练等内容,更多精彩不容错过。


以上便是《Python学习08讲——字典上》的所有内容,更多python学习请继续关注我的博客——风起怨江南(传送门,不定期更新,原创不易,如果喜欢请点赞和关注,谢谢大家的支持!

想获得免费的学习资料请添加微信公众号——风起怨江南,非常感谢大家的关注和支持!

发布了11 篇原创文章 · 获赞 17 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/JackMengJin/article/details/105585298