《Python核心编程》(第二版) 第7章 映像和集合类型

第7章 映像和集合类型


7.1 映射类型:字典

(1)字典是Python语言中唯一的映射类型。映射类型中哈希值(Key)和指像对象(Value)是一对多的关系。

(2)映射类型通常被称为哈希表。

(3)一个字典条目的语法格式是键-值对,多条字典条目被包含在大括号({})中。


7.1.1 如何创建字典和给字典赋值

除赋值操作创建字典外,可通过fromkeys()创建“默认”字典。

>>>ddict = {}.fromkeys(('x', 'y'), -1)

>>>ddict

{'y': -1, 'x': -1}


7.1.2 如何访问字典中的值


7.1.3 如何更新字典


7.1.4 如何删除字典



7.2 映射类型操作符

字典可以和所有的标准类型操作符一起工作,但却不支持像拼接和重复等操作。


7.2.1 标准类型操作符


7.2.2 映射类型操作符

(1)字典的键查找操作符

(2)(键)成员关系操作(in、not in)



7.3 映射类型的内建函数和工厂函数


7.3.1 标准类型函数【type()、str()和cmp()】

1.字典的cmp()算法规则:

(1)比较字典长度,键的个数越多,字典越大。

(2)比较字典的键:字典中相同的键会映射到哈希表的同一个位置,保证了字典检查的一致性。当2个键不相同时,直接对键进行比较。

(3)比较字典的值:两个字典的长度和键完全相同,则对值进行比较。

(4)完全匹配:字典的长度、键、值完全相同,则字典相等。


7.3.2 映射类型相关的函数

1.dict()

(1)用于创建字典,如不提供参数则生成空字典。

(2)参数是可迭代的,即是一个序列,或者是一个迭代器,或者为可迭代对象。


2. len()

返回所有元素(键-值对)的数目


3.hash()

判断对象是否为可以作为字典的键,将对象传递给hash(),返回该对象的哈希值,只有该对象为可哈希的(不可哈希则返回错误),才可作为字典的键。



7.4 映射类型内建方法

1.dict.clear():删除字典中的所有元素

2.dict.copy():返回字典(浅复制)的一个副本

3.dict.fromkeys(seq, val = None):创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(如不提供此值,则默认为None)

4.dict.get(key, default = None):返回字典中key对应的值,如字典中不存在此键,则返回default的值。

5.dict.has_key(key):如果字典中存在键则返回True,否则返回False,可用in和not in代替之。

6.dict.items():返回一个包含字典中键-值对之元组列表。

7.dict.keys():返回一个包含字典中键的列表。

8.dict.pop(key, default):如果字典中key存在,删除并返回dict[key],如果不存在,则返回default值(未提供default值会产生异常)。

9.dict.setdefault(key, default = None):类似set(),如果字典中不存在key,则有dict[key] = default为之赋值。

10.dict.update(dict2):将字典dict2的值键对添加到字典dict中。

11.dict.values():返回一个包含字典中所有值的列表。



7.5 字典的键


7.5.1 不允许一个键对应多个值

赋值会把原值替换掉


7.5.2 键必须是可哈希的

所有不可变类型都是可哈希的,可哈希的键是不可更改的。



7.6 集合类型

数学上,把set称为由不同元素组成的集合,集合分为可变集合(set)和不可变集合(frozenset)。可变集合是不可哈希的。


7.6.1 如何创建集合类型和给集合赋值

集合被创建的方法:set()和frozenset()

>>>s = set('china')

>>>s

set(['c', 'h', 'i', 'n', 'a'])

>>>t = frozenset('lei')

>>>t

frozenset(['c', 'h', 'i', 'n', 'a'])


7.6.2 如何访问集合中的值

可遍历查看元素是否为集合中的成员:

>>>'c' in s

True

>>>for i in s:

...        print i

c

h

i

n

a


7.6.3 如何更新集合

用各种集合内建的方法和操作符添加和删除集合的成员。


7.6.4 如何删除集合中的成员和集合



7.7 集合类型操作符


7.7.1 标准类型操作符(所有的集合类型)

1.成员关系(in, not in)

2.集合等价/不等价:两个集合相等是指,对每个集合而言,当且仅当其中一个集合中的每个成员同时也是另一个集合中的成员。

3.子集/超集:“小于”符号(<, <=)用来判断子集,“大于”符号(>, =)用来判断超集。


7.7.2 集合类型操作符(所有的集合类型)

1.联合(|):两个集合的联合是一个新集合,该集合的每个元素都至少是其中一个集合的成员。等价于union()。

>>>s = set('lei')

>>>t = frozenset('cheng')

>>>s | t

set( ['l', 'e', 'i', 'c', 'h', 'n', 'g'] )


2.交集(&):交集形成的新集合中的每个元素同时是两个集合中的成员

>>>s&t

set( ['e'] )


3.差补/相对补集(-):s和t的差补形成的新集合中的元素只属于s,而不属于t。等价于difference()。

>>>s-t

set( ['l', 'i'] )


4.对称差分(^):s和t的对称差分是一个新集合,该集合中的元素只能属于集合s或集合t,不能同时属于两个集合。

>>>s^t

set( ['l', 'i', 'c', 'h', 'n', 'g'] )


5.混合集合类型操作

(1)上示例中,左边s是可变集合,右边t是不可变集合,使用集合操作符后产生的依然是可变集合。但如左右顺序反过来则会生成不可变集合。

(2)集合类型操作结果与左操作数的类型相同。


7.7.3 集合类型操作符

1.(Union)Update(|=):从已存在的集合中添加*(可能多个)成员,与update()等价。

2.Retention/Intersection Update(&=):保留(或交集更新)操作保留与其它集合的共有成员,与intersection_update()等价。

3.Difference Update(-=):s-=t 返回一个新集合,该集合中的成员是集合s去除掉集合t中的元素后剩余的元素。

4.Symmetric Difference Update(^=):差分更新操作:s^=t 返回的集合中的成员仅是原集合s或仅是另一集合t中的成员。



7.8 内建函数

7.8.1 标准类型函数

len()返回集合元素个数。


7.8.2 集合类型工厂函数

set()和frozenset()



7.9 集合类型内建方法


7.9.1 方法(所有集合类型)

(1) s.issubset(t)

(2) s.isupperset(t)

(3) s.union(t)

(4) s.intersection(t)交集

(5) s.difference(t) 仅为s成员

(6) s.symmetric_difference(t) 非s和t共有成员

(7) s.copy()


7.9.2 方法(仅适用于可变集合)

1. s.update(t)

2.s.intersection_update(t):交集

3.s.difference_update(t):仅为s元素

4.s.symmetric_difference_update(t):非s和t共有元素

5.s.add(obj)

6.s.remove(obj)

7.s.discard(obj):如果obj是s中的元素,则从s中删除obj。

8.s.pop()

9.s.clear()


7.9.3 操作符和内建方法比较



7.10 集合类型总结表



7.11 相关模块



7.12 练习

你可能感兴趣的:(python核心编程)