笔者:风起怨江南 出处:https://blog.csdn.net/JackMengJin 笔者原创,文章欢迎转载,如果喜欢请点赞+关注,感谢支持!
目录
由于篇幅问题,字典的学习会分两讲完成,剩余内容会在《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学习请继续关注我的博客——风起怨江南(传送门),不定期更新,原创不易,如果喜欢请点赞和关注,谢谢大家的支持!
想获得免费的学习资料请添加微信公众号——风起怨江南,非常感谢大家的关注和支持!