3.5 无序型数据字典和集合
无序型数据字典和集合用大括号和逗号分隔建立,例如字典d={'语文':3,'数学':6,'体育':9},集合s={3,6,9}。不同之处是,字典的每个元素有键和值两部分,键和值用冒号分隔。字典和集合具有共同的操作函数,见表3-8(表中s={3,6,9},d={'语文':3,'数学':6,'体育':9})。
表3-8 字典和集合操作函数
示例代码如下:
#//第3章/3.10.py s={3,6,9} d={'语文':3,'数学':6,'体育':9} print(len(s),len(d)) #元素个数 print(max(s),max(d)) #最大值的元素 print(min(s),min(d)) #最小值的元素 print((3 in s),('英语'in d)) #在不在的判断
运行结果如下:
3 3 9语文 3体育 True False
当用max()、min()比较字符“语文”“数学”“体育”的大小时,计算机比较的是“语”“数”“体”三个字符对应的ASCII码的大小。ord()命令用于查看字符的ASCII码,例如ord('语')。此外,可用chr()命令查看ASCII码对应的字符,例如chr(35821)。你的姓名的ASCII码是多少?
1.字典
有序列数据类型是通过固定的序列号访问元素的,而字典是无序列数据类型,不可以用固定的序列号的方式访问数据。
字典,例如d={'语文':3,'数学':6},由大括号和键-值对组成,'语文'称为键,3称为值,键和值用冒号分隔,不同的键-值对用逗号分隔。字典是通过键访问元素的,所以字典的键在字典内必须是唯一的、不变的,例如字符串、数字、元组,但字典的值却可以是任意类型的数据,如d2={1:3,2:[1,2,3]}。
字典的操作方法见表3-9(表中d={'语文':3,'数学':6})。
表3-9 字典操作方法
代码如下:
#//第3章/3.11.py d={'语文':3,'数学':6,'体育':9} print(d.keys()) print(d.values()) print(d.items()) print(d.get('语文','不存在')) print(d.get('英语','不存在')) print(d.pop('英语','不存在')) d.popitem() print(d) d.clear() print(d)
运行结果如下:
dict_keys(['语文','数学','体育']) dict_values([3,6,9]) dict_items([('语文',3),('数学',6),('体育',9)]) 3 不存在 不存在 {'语文':3,'数学':6} {}
可以看出d.keys()、d.values()、d.items()是字典数据类型,可以用list()命令转换为列表,然后用列表的方法操作,如list(d.keys),可得到列表['语文','数学','体育']。
字典的访问、修改、删除也可以通过索引的方法实现,只不过索引的是键名,例如d['语文']用于获取键为“语文”的值,d['语文']=9用于把键为'语文'的值修改为9。
del d['语文']用于删除键为“语文”的键-值对,列表也可以用del的方法通过索引和切片来删除元素。
2.集合
集合,例如T={'红红','豆豆'},可以看作字典,但去掉了值,因为键不能重复,所以在集合中没有重复的元素,集合的元素只能是不可变的数字、字符串、元组。集合的操作符与方法见表3-10(表中S={'明明','红红'},T={'红红','豆豆'})。
表3-10 集合的操作符与方法
示例代码如下:
#//第3章/3.12.py S ={'明明','红红'} T ={'红红','豆豆'} print(S&T) #求S与T的交集 print(S|T) #求S与T的并集 print(S - T) #求S与T的差集 print(S ^ T) #求S与T的补集 S.add('豆豆') #添加元素 S.add('豆豆') print(S) S.remove('豆豆') #删除元素 print(S)
运行结果如下:
{'红红'} {'明明','豆豆','红红'} {'明明'} {'明明','豆豆'} {'明明','豆豆','红红'} {'明明','红红'}
由上可见,集合可以重复添加,但不会有效果,集合会自动去掉重复的元素(简称去重)。
3.各种数据类型的判断、生成、转换与复制
Python用type()判断数据类型,不同类型的数据可以相互转换,见表3-11。
表3-11 数据的转换与生成
d={}生成的是空字典,空集合只能用set()生成,数据类型名即类型转换函数。