Python应用轻松入门
上QQ阅读APP看书,第一时间看更新

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()生成,数据类型名即类型转换函数。