1、字典–映射类型
映射类型通常被称作哈希表。哈希表有较好的性能。
映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的关系。
Python的字典是作为可变的哈希表实现的。字典类似于Perl中的“关联数组”或散列。
一个字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也包括其他容器类型。
字典类型和序列类型容器类(列表、元组)的区别是存储和访问数据的方式不同。序列类型只用数字类型的键,字典可以用其他类型做键。
字典是一个无序的数据类型。
字典条目包含在{}中。
创建字典 dict1={}
使用工厂方法dict()来创建字典d=dict(([‘x’,1],[‘y’,2]))(2.2)
要得到字典中某个元素的值,可以用字典键加上中括号来得到。在字典中找不到某个数据元素时,会得到KeyError异常。
使用内建方法fromkeys()(2.3)创建默认字典,字典元素具有相同的值,若没有给出,默认为None。d={}.fromkeys((‘x’,’y’),-1)(2.3)
遍历字典
for key in dict1.keys():
(key,dict1[key])
使用迭代器来轻松地访问类序列对象(sequence like objects)(2.2)
for key in dict2:
(key,dict2[key])
检查字典中是否有某个键可以使用has_key()方法(未来弃用)以后使用in或not in操作符(2.2)
字典可以采用各种类型的数据作为字典的键。
字典的键不可变,所以字典不可作为字典的键。字典的键必须是可哈希的。
给字典添加新项(新元素);修改字典已存在项;或删除已存在项。
dict1[‘name’]=’venus’ #更新或增加新条目
可以使用内建方法update()将整个字典的内容添加到另一个字典。
>>>print 'host %(name)s is running on port %(port)d' %dict #另一种在字典中使用字符串格式符(%)的方法
用del语句删除字典 del dict1
用del语句删除字典元素 del dict1[‘name’]
删除字典所有条目 dict1.clear()
删除并返回字典条目 dict1.pop(‘name’)
2、映射类型操作符
(1)标准类型操作符
除拼接(concatenation)和重复(repetition)操作外,字典可以和所有的标准类型操作符一起工作。
(2)映射类型操作符
字典键查找操作符([])
(键)成员关系操作(in,not in)
3、映射类型的内建函数和工厂方法
(1)标准类型函数
type()
str()
cmp()比较字典的方法:首先是字典的大小,然后是键,最后是值。
(2)映射类型相关的函数
dict()工厂函数
当容器对象作为dict()的参数时,若参数是可迭代的,即一个序列,或迭代器或一个支持迭代的操作,那每个可迭代元素必须成对出现。若参数是另一个字典,新生成的字典是原字典对象的浅复制版本。而从已存在字典生成新字典推荐使用copy()方法,速度比dict()快。2.3开始,dict()方法可接受字典或关键字参数字典。
>>>d=dict(x=1,y=2)
>>>dict9=dict(**d)
使用下面的代码更聪明(效率更好):
>>>dict9=d.copy()
len() 返回元素数目
hash() 可判断某个对象是否可以做一个字典的键。会返回传入对象的哈希值。只有对象是可哈希的,才可以作为字典的键。若参数是不可哈希的,会产生TypeError错误。
若两个数值相等,即使两者数据类型不同,也会得到相同哈希值。
4、映射类型内建方法
5、字典的键
每个键只能对应一个项。当有键发生冲突,取最后的赋值。
键必须是可哈希的。列表和字典等可变类型,它们不是可哈希的,所以不能作为字典的键。
所有不可变对象都是可哈希的,因此它们都可以作为字典的键。值相等的数字表示相同的键(如1和1.0的哈希值相同,是相同的键)。
也有很少的可变对象可以做字典的键,如:实现__hash()__特殊方法的类,若__hash()__方法返回一个整型,该对象仍然可以做字典的键,尽管是可变对象。
元组做有效的键,必须使用限制:元组中只包括像数字和字符串这样的不可变参数才可。
6、集合类型(2.4)
集合(set)、集合元素(set element)
集合对象是一组无序排列的可哈希的值。
集合成员可以做字典的键。
集合本身是无序的,不可以为集合创建索引或执行切片操作,也没有键可用来获取集合中元素的值。
集合分为可变集合(set)和不可变集合(frozenset)
修改不可变集合会引发异常。
可变集合不能用作字典的键也不能做其他集合中的元素。
集合创建的唯一方法:用工厂方法set()/frozenset()
遍历访问集合元素: for i in s:
集合使用in和not in操作符检查成员是否存在。
更新可变集合:
s.add(‘z’)
s.update(‘pypi’)
s.remove(‘z’)
s-=set(‘pypi’)
使用del语句删除集合 del s
7、集合类型操作符
(1)标准类型操作符(所有的集合类型)
in/not in(成员关系)
==/!=(集合等价/不等价)
< <=/> >=(子集/超集)
(2)集合类型操作符(所有的集合类型)
混合集合类型操作
(3)集合类型操作符(仅适用于可变集合)
8、内建函数
(1)标准类型函数
len()
(2)集合类型工厂函数
set()/frozenset()参数必须是可迭代的,即一个序列,或迭代器,或支持迭代的对象。
9、集合类型内建方法
很多内建方法都有等价的操作符。
(1)适用于所有集合的方法
(2)仅适用于可变集合的方法
(3)操作符和内建方法比较
两者之间有一个重要的区别:当用操作符时,操作符两边的操作数必须是集合。在使用内建方法时,对象也可以是迭代类型的。