Python--映像和集合类型(字典)

来源:互联网 发布:数据库原理 pdf 编辑:程序博客网 时间:2024/05/21 19:47
***********************************************************如果没明确定义,默认集合类型是元组。最好显示的创建元组。***********************************************************字典:不可变对象的值是不可改变的,意味着他们通过hash算法得到的总是一个值。这是作为字典键值的一个必要条件。工厂模式:工厂类内部包含了必要的逻辑判断,客户端只要提供选择条件即可,这样客户端就不需要知道具体产品的信息了。浅拷贝和深拷贝浅拷贝:字符串被显式的拷贝,并新创建了一个字符串对象,列表元素只是把它的引用复制了一下,并不是它的成员。浅拷贝的对象本身是新的,但它的内容不是。序列类型对象的钱靠背是默认类型拷贝,有以下实施方式:完全切片操作、利用工厂函数(list、dict等)、使用copy模块的copy函数。
>>> person = ['name',['savings',100.00]]>>> hubby = person[:]>>> wifey = list(person)>>> [id(x) for x in person,hubby,wifey][42230368, 42221736, 42221856]>>> hubby[0] = 'joe'>>> wifey[0] = 'Jane'>>> hubby,wifey(['joe', ['savings', 100.0]], ['Jane', ['savings', 100.0]])>>> hubby[1][1] = 30.00>>> hubby,wifey(['joe', ['savings', 30.0]], ['Jane', ['savings', 30.0]])

深拷贝:创建一个新的容器对象,包含原有对象元素(引用)全新拷贝的引用
>>> person = ['name',['savings',100.00]]>>> hubby = person>>> import copy>>> wifey = copy.deepcopy(person)>>> [id(x) for x in person,hubby,wifey][42225376, 42225376, 42230328]>>> hubby[0] = 'joe'>>> wifey[0] = 'Jane'>>> hubby,wifey(['joe', ['savings', 100.0]], ['name', ['savings', 100.0]])>>> hubby[1][1] = 30.00>>> hubby,wifey(['joe', ['savings', 30.0]], ['name', ['savings', 100.0]])>>> 

*********************************************************************
非容器类型(数字、字符、字符串等)没有被拷贝一说,浅拷贝是用完全切片操作完成的。
(python的容器主要包含列表列表,字典)
如果元组变量只包含原子类型对象(代码、类型、xrange等),对他的深拷贝将不会进行。如果把账户信息改成元组类型,那也只能得到一个浅拷贝。(元组无法进行深拷贝)
********************************************************************

用工厂方法创建字典
>>> fdict = dict((['x',1],['y',2]))>>> fdict{'y': 2, 'x': 1}


用内建方法创建“默认字典”,字典中元素具有相同的值(若没给出,默认为None)
>>> fdict = dict((['x',1],['y',2]))>>> fdict{'y': 2, 'x': 1}>>> 

通过迭代器访问类序列对象
>>> for key in dict2:print 'key=%s,value=%s' %(key,dict2[key])key=name,value=earthkey=port,value=80

字典中混用数字和字符串
>>> dict3 = {}>>> dict3[1] = 'abc'>>> dict3['1'] = 3.14159>>> dict3[3.2] = 'xyz'>>> dict3{'1': 3.14159, 1: 'abc', 3.2: 'xyz'}>>> 

更新字典
添加一个数据项或新元素、修改一个已存在的数据项、删除一个已存在的数据项
>>> >>> dict2 = {'name':'earth','port':80}>>> dict2['name'] = 'venus'           #更新已有条目>>> dict2['arch'] = 'sunos5'          #增加新条目>>> print 'host %(name)s is running on port %(port)d' %dict2host venus is running on port 80>>> del dict2['name']                 #删除键为“name”的条目>>> dict2.clear()                     #删除字典中所有条目>>> del dict2      #删除整个字典

****************************
注意字典元素打印的方法
****************************

字典的比较算法
首先是字典大小,然后是键,最后是值。

映射类型相关函数
工厂函数被用来创建字典。如果不提供参数,会生成空字典。
>>> dict(zip(('x','y'),(1,2))){'y': 2, 'x': 1}>>> dict([['x',1],['y',2]]){'y': 2, 'x': 1}>>> dict([('xy'[i-1],i) for i in range(1,3)]){'y': 2, 'x': 1}>>> dict(x=1,y=2){'y': 2, 'x': 1}>>> dict8 = dict(x=1,y=2)>>> dict8{'y': 2, 'x': 1}>>> dict9 = dict(**dict8)             #效率低,不采用,宜用copy>>> dict9{'y': 2, 'x': 1}>>> dict9 = dict8.copy()>>> dict9{'y': 2, 'x': 1}>>> 

映射类型内建方法-返回字典的值
>>> dict2 = {'name':'earth','port':80}>>> dict2.keys()['name', 'port']>>> dict2.values()['earth', 80]>>> dict2.items()[('name', 'earth'), ('port', 80)]

字典提供的方法
dict.clear():删除字典中所有元素
dict clear():返回字典(浅复制)的一个副本
dict.fromkeys(seq,val = None):创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值(默认为None)。
>>> {}.fromkeys('xyz'){'y': None, 'x': None, 'z': None}>>> {}.fromkeys(('love','honor'),True){'love': True, 'honor': True}dict.get(key,default=None):对字典dict中的键key,返回它对应的值value,如果字典中不存在此键,返回default的值(默认为None)dict.items(key):返回包含字典中键、值对元组的列表dict.keys():返回一个包含字典中键的列表dict2.values():返回一个包含字典中所有值的列表dict.pop(key[,default]):若存在key键,删除并返回其值,若不存在,且没有给出default值,则引发KeyError异常dict.setdefault(key,default=None):查找键为key的值,若存在,返回其值,若不存在,赋值default>>> mudict = {'host':'earth','port':80}>>> mudict.keys()['host', 'port']>>> mudict.setdefault('port',8080)80dict.update(dict2):将字典dict2的键值对添加到字典dict

字典的键必须可哈希
作为键的Python对象必须是可哈希的对象,列表和字典这种可变类型不能作为键。
值相等的数字键值是相同的,整型1和浮点数1.0的哈希值相同,为相同的键。
                                             
0 0
原创粉丝点击