您的位置:首页 > 编程语言 > Python开发

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

2017-05-02 10:09 846 查看
#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函数创建一个默认字典
#值为56
dict5={}.fromkeys(("x","y","z"),56)
#调用fromkeys函数创建一个默认字典
#值模默认为None
dict6={}.fromkeys(("x1","y1","z1"))

#输出创建的字典
print dict1
print dict2
print dict3
print dict4
print dict5
print dict6
print "*"*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"]=8080
dict2[234]=456
dict2["234"]=456
dict3[3.2]=3.1415926
print dict1
print dict2
print dict3
print "*"*50
#修改一个已存在的数据项
dict1["name"]="hello world"
dict1["port"]=8888
print "dict1[\"name\"]=",dict1["name"]
print "dict1[\"port\"]=",dict1["port"]
print "*"*50

#删除一个已存在的数据项
del dict2[234]  #删除一个数据项
dict3.clear()   #删除字典中的内容
print dict3
del dict3   #删除整个字典
name=dict1.pop("name") #删除并返回键为“name”的条目
try:
print dict2[234]
except KeyError,e:
print "KeyError:",e

try:
print dict3
except NameError,e:
print "NameError:",e
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐