在这一章,我们最后介绍两种数据类型。
- 字典(Dictionary)
之前我们讲了列表,我们知道,我们可以通过索引号来调取列表中特定的元素。现在假设我们要给一个学校的所有学生做一个收录——通过学生的学号调取学生的名字。学号通常都不是从0开始1,2,3,4这么往上走的,你比如我以前的学号就是54193775。那如果一个列表,索引要取到54193775这个列表岂不是需要有超过5千万个元素在里面?哪个学校会有5千多万学生?有的学校的学号还是0开头的呢,这怎么搞?
要是用户可以自定义列表里面每个元素的索引号就好了!Python为了解决这些问题,引入了字典这一概念,在字典中,我们可以储存多个对象,并给每个对象自己定义一个“索引号”:
>>> students_list = { '54193775':'OU Ge', '54193776':'OU Di', '54193777':'OU Ye'}
(注:为了看清,我在每个逗号后面另起一行)
我们观察,首先要定义一个列表,需要一对大括号{}。大括号内,可以存放多组数据,组与组之间用逗号隔开。每组数据中有一个键(key)和一个值(value),用冒号隔开。其中,冒号左侧的键(key)就是我们为每个值(value)自定义的索引。让我们试验一下:
>>> students_list['54193775'] 'OU Ge'
厉害了,我们得到了Python字典的创建方法:
{ <键_1> : <值_1>, <键_2> : <值_2>, <键_3> : <值_3>, …………, <键_n> : <值_n> }
在Python中,字典和列表一样,是可变对象。不过,字典的键只能是不可变对象,例如我们前面用的字符串。而值可以是任意对象,例如,我们可以把学生姓名细化到姓和名分开,放入一个列表里面,再作为值收录:
>>> students_list = { '54193775':['Ge', 'OU'], '54193776':['Di', 'OU'], '54193777':['Ye', 'OU']}
- 基础字典操作方法
由于字典是可变对象,我们可以用键来调取或者更改列表中的值:
>>> students_list = {'54193775' : 'OU Ge', '54193776' : 'OU Di', '54193777' : 'OU Ye'} >>> students_list['54193775'] 'OU Ge' >>> students_list['54193775'] = 'Ge OU' >>> students_list {'54193775': 'Ge OU', '54193776': 'OU Di', '54193777': 'OU Ye'}
我们可以用len()查看字典长度,既字典中键和值有多少对:
>>> len(students_list) 3
我们可以用in判断特定键是否在字典中,注意这是判定键是否存在,不是判定值是否存在:
>>> '54193776' in students_list True >>> 'OU Di' in students_list False
我们可以用values()和keys()来查看一个字典中所有的值或键:
>>> students_list.values() dict_values(['Ge OU', 'OU Di', 'OU Ye']) >>> students_list.keys() dict_keys(['54193775', '54193776', '54193777'])
注意,查看的结果并不是一个列表,是特殊的称为字典键和字典值的数据类型,我们目前不需要对这两种类型做深入了解。
如果你想把所有的键或者值强制转换成一个列表,可以使用强制转化(下一节会讲到):
>>> list(students_list.values()) ['Ge OU', 'OU Di', 'OU Ye']
- 集合(set)
最后简单说一说集合:Python中的集合具有数学意义上的集合的所有属性,用来储存一组无序、不重复的不可变对象。定义方式为,在一对大括号内,将个元素用逗号隔开:
>>> num_set = {5, 2, 2, 6, 1} >>> num_set {1, 2, 5, 6}
我们发现,Python自动去除了重复的元素,并且集合的顺序和我们定义的顺序相比也发生了变化。
- 基础集合操作方法
可以使用len()获得集合中元素个数,可以使用in判断特定元素是否在集合中:
>>> len(num_set) 4 >>> 2 in num_set True
Python中的集合支持数学意义上的包含、包含于、交集、并集等一系列操作,请自行复习包含、真包含等概念-.-
>>> num_1 = {1, 2} >>> num_2 = {1, 2, 3} >>> num_1 | num_2 {1, 2, 3} >>> num_1 & num_2 {1, 2} >>> num_1 | num_2 #并集 {1, 2, 3} >>> num_1 & num_2 #交集 {1, 2} >>> num_1 <= num_2 #num_1包含于num_2则为True,反之为False True >>> num_1 < num_2 #num_1真包含于num_2则为True,反之为False
这些就是所有的字典和集合的操作方法了吗!No骚年!这些是常用的,想知道所有的字符串操作方法吗!在IDLE里面输入help(dict)、help(set)试试~
- 本节练习
请建立一个字典,可以通过中文一周七天的说法查询到对应的英文单词。
看答案
>>> week = {'星期一' : 'Monday', '星期二' : 'Tuesday', '星期三' : 'Wednesday', '星期四' : 'Thursday', '星期五' : 'Friday', '星期六' : 'Saturday', '星期日' : 'Sunday',} >>> week['星期一'] 'Monday' >>> week['星期四'] 'Thursday' >>> week['星期日'] 'Sunday'
酱哦