第7章映射和集合类型
字典是映射类型,实现采用哈希值和指向的对象。
字典对象可变。
处理过程:对键执行哈希操作,根据计算结果在某个地址中存储你的值。
哈希表无序
Keys()或者values()返回列表
删除字典: dict1.clear()
删除字典元素: del dict1[‘name’], dict1.pop(‘name’):删除并返回值
7.2映射类型操作符
标准类型操作符: < .
查找操作符: []
键成员关系操作: in , not in
7.3映射类型的内建函数和工厂函数
7.3.1 标准类型函数[type() , str()和cmp()]
type():工厂方法,会会
str():返回字典的自复查un表示
字典比较:cmp(dict1 , dict2):
1)比较字典长度,dict1比dict2长,cmp()返回正值
2)长度相同,就比较键,
3)长度和键相同,比较值
dict():工厂函数,创建字典
字典复制:推荐用copy()比从原字典生成的快,这是一个浅拷贝,对当前
拷贝的字典进行操作时,会影响到原来的字典
dict2 = dict1.copy()
import copy
#字典拷贝用dict.copy()速度比较快
def dictCopy_test():
dict1 = {'x':1 , 'y':2}
dict2 = dict1.copy()
print(str(dict2))
len(dict1):返回键值对的数目
hash():返回对象的哈希值,键必须是可哈希的
def hashTest():
result = hash('hello world')
print(result)
dict1.keys():返回所有键组成的列表
dict1.values():返回值组成的列表
dict1.items():返回所有键值对组成的列表
dict.iter():返回迭代子而非列表
dict.update(dict1):将字典dict1的键值对添加到字典dict中,重复的会被新的键值对来取代
dict.get(key,default=None)
dict.has_key(key)
7.5字典的键
不允许一个键对应多个值
键必须可哈希,不可变类型都是可哈希的,例如数字和字符串
实现了__hash__)的类可以返回整数,所以可以哈希
如果键是恶变对象,值可以变化,键变化,无法找到
元组必须只含有数字和字符串才可以作为键
7.6集合类型
set,集合是无需排列的可哈哈希值组成
集合创建用set()
访问集合中的值用in,not in
set1.remove(‘z’)
删除集合:del set1
7.7集合类型操作符
in, not in
两个集合相等:另一个集合中每个成员是另一个集合成员
set1 == set2
set1 < set2 :表示set1是set2的子集
联合(1): set1 | set2,会进行或操作
交集(&):返回一个集合,包含两个集合都存在的元素
差补:s – t,只属于集合s,部署于集合t
对称差分:异或,不能同时属于两个集合
def setOperationTest():
set1 = set([1,2]) #集合需要用数组初始化
set2 = set([2,3])
orSet = set1 | set2
andSet = set1 & set2
print(orSet)
print(andSet)
7.7.3 集合类型操作符
Update (|=):在已存在集合中添加成员,和update()等价
&=和intersection_update()等价:保留与其他集合共有成员
-= 差更新,
^=
7.8内建函数
set()生成可变集合,可传入序列
frozenset()不可变集合
方法:
s.issubset(t)
s.issuperset(t)
s.union(t):并集
s.intersection(t):交集
s.difference(t):返回的集合是s的成员,不是t成员
s.symmetric_difference(t):返回新集合,是s或t成员
可变集合:
add(),remove(),discard(),pop(),clear()
s.discard(obj):从集合s中删除对象obj
s.pop():删除集合s任意对象并返回