python映射类型:字典---创建、更新、删除、修改等操作实例源码

来源:互联网 发布:成都软件培训哪家好 编辑:程序博客网 时间:2024/06/05 21:51
#coding=utf8'''字典是python语言中唯一的映射类型。映射类型对象里哈希值(键)和指向的对象(值)是一对多的关系。字典对象是可变的,它是一个容器类型,能存储任意个数的python对象,其中包括其他容器类型。字典类型和序列类型容器类(列表、元组)的区别是存储和访问数据的方式不同。序列类型只用数字类型的键(从序列的开始起按数值顺序的索引)。映射类型可以用其他对象类型做键;一般最常见的是用字符串做键(key)。和序列类型的键不同,映射类型的键直接或间接地和存储的数据值相关联。映射类型中的数据是无序排列的。什么是哈希表?它们与字典的关系是什么?序列类型用有序的数字键做索引键数据以数组的形式存储。一般索引值与所存储的数据毫无关系。哈希表中存储的每一条数据,叫做一个值,是根据与它相关的一个被称作键的数据项进行存储的。键和值合在一起被称为"键-值 对"(key-value pairs)。哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中存储值。任何一个值存储的地址皆取决于它的键。哈希表中的值是无序的数据集。所能获得的有序集合只能是字典中的键的集合或者值的集合。方法keys()/values()返回一个列表,该列表是可排序的。使用items()方法得到包含键、值对的元组的列表排序。由于字典本身是哈希的,所以是无序的。创建字典只需要把字典赋值给一个变量,不管这个字典是否包含元素:dict1={} 或者 dict1={"name":123,"456":789}从python2.2版本起,可以用工厂方法dict()来创建字典。例如:fdictinary=dict((['x',254],[456,789]))从python 2.3版本起,可以用一个很方便的内建方法fromkeys()来创建一个“默认”字典,字典中元素具有相同的值(如果没有给出,默认为None):ddict={}.fromkeys(('x','y'),-5)或者不给出键值 ddict={}.fromkeys(('x','y'))要想遍历一个字典(一般用键),只要循环查看它的键,然后通过以键为索引获取值。从python 2.2开始,可以不必使用keys()方法获取供循环使用的键值对列表。可以使用迭代器轻松访问类序列对象,例如字典和文件。只需要用字典的名字就可以在for循环里遍历字典。要想获取字典中某个元素的值,可以使用所熟悉的字典键加上中括号来得到。例如:dict1['x']如果想访问字典中的一个元素,而该元素在字典中没有对应的键,将会产生一个错误。检查一个字典中是否有某个键的最好方法是用字典的has_key()方法,或者in、not in操作符。字典中的键必须是可哈希的,所以数字和字符串可以作为字典中的键,但是列表和其他字典不行。如果更新字典,以下有几种方式对字典做修改:1》添加一个新数据项或新元素(即,一个键-值对)2》修改一个已存在的数据项3》删除一个已存在的数据项也可以使用内建方法update()将整个字典的内容添加到另一个字典。删除整个字典的操作不常见。通常,删除字典中的某个元素(del dict1["name"])或者清除整个字典的内容(dict1.clear())。也可以使用pop函数,删除并返回键为"name"的条目。dict1.pop("name")PS:避免使用内建对象名字作为变量的标识符'''#创建字典并给字典赋值dict1={} #创建一个空的字典dict1["name"]="ewang" #给字典添加一个新的数据项dict2={"Name":"ewang","age":28} #创建一个字典并赋值dict3=dict()  #调用dict函数创建一个空字典dict4=dict((["hello","ewang"],["hi","EWANG"])) #调用dict函数并赋值#调用fromkeys函数创建一个默认字典#值为56dict5={}.fromkeys(("x","y","z"),56)   #调用fromkeys函数创建一个默认字典#值模默认为Nonedict6={}.fromkeys(("x1","y1","z1"))   #输出创建的字典print dict1print dict2print dict3print dict4print dict5print dict6print "*"*50#访问字典中的值for key in dict5.keys(): #通过键遍历一个字典    print "key=%s ,value=%d"  %(key,dict5[key])    print "*"*50 print "no call keys function"for key in dict5: #迭代器访问类序列对象    print "key=%s ,value=%d"  %(key,dict5[key])    print "*"*50       #获取字典中某个元素的值print "dict1[\"name\"]=" ,dict1["name"]print "dict2[\"Name\"]=" ,dict2["Name"]try:    #如果字典中不存在相应的键,会报一个错误    print "dict2[\"Name\"]=%s" %(dict2['ame'])except KeyError,e:    print "KeyError:",e    if dict2.has_key("age"):    print "dict2 exitsts the key age"if "age" in dict2:    print "dict2 exitsts the key age"if "Age"  not in dict2:    print "dict2  not exitsts the key Age"print "*"*50    #添加一个新的数据或新元素dict1["server"]="192.168.111.111"dict1["port"]=8080dict2[234]=456dict2["234"]=456dict3[3.2]=3.1415926print dict1print dict2print dict3print "*"*50#修改一个已存在的数据项dict1["name"]="hello world"dict1["port"]=8888print "dict1[\"name\"]=",dict1["name"]print "dict1[\"port\"]=",dict1["port"]print "*"*50#删除一个已存在的数据项del dict2[234]  #删除一个数据项dict3.clear()   #删除字典中的内容print dict3del dict3   #删除整个字典name=dict1.pop("name") #删除并返回键为“name”的条目try:    print dict2[234]except KeyError,e:    print "KeyError:",etry:    print dict3except NameError,e:    print "NameError:",e

0 0
原创粉丝点击