字典与集合*

在这一章,我们最后介绍两种数据类型。

  • 字典(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'

酱哦

发表评论

电子邮件地址不会被公开。 必填项已用*标注