Python的映射——字典
字典的简介
字典作为Python的一种容器,是不需要讲究排序的,所以字典并不属于序列的一种。这字典里存在键(key)和值(value)。值是存储在键里,所以我们只要访问键就能得出值来。对于字典的基本操作有以下一种,最基本的还是字典的创建赋值, 访问,更新,删除。
1.字典的创建有三种方法,第一种是最常见的赋值,就是将一个字典直接赋值给变量,那么这个变量就是一个字典了。第二种的话就是使用dict()函数,可以直接将成对的序列转化为字典,这个方式会在下面详细讲解。第三种也是使用函数,不过这个函数并不怎么多见,方式是:{}.fromheys()。以上三种具体使用方法如下
#创建1 dict1 = {'name':'earth', 'port':80} print dict1 ------------- >{'name':'earth', 'port':80} #创建2 dict2 = dict((['x',1], ['y',2])) print dict2 ------------- >{'y': 2, 'x': 1} #创建3 #fromkeys接收相同的值传给前面的键 dict3 = {}.fromkeys(('x', 'y'), -1) print dict3 ------------- >{'y': -1, 'x': -1}
访问字典也有两种情况是值得一说的,一种就是正常的访问字典中的一个元素,只要在[]中标出键就可以,而另外一种是在遍历字典的情况:遍历字典的时候默认的是遍历字典的键,而不是值,这一个比较有意思的地方,根本什么都不用说,直接把键给遍历了,如果这个时候需要键对应的值,只需要用得到的键调出值就可以了
dict1 = {'name':'earth', 'port':80} for key in dict1: print 'key = %s, value = %s ' %(key, dict1[key]) ------------- >key = name, value = earth >key = port, value = 80
更新、删除跟序列的区别不是很大,序列中[]里填写下标,而在字典中,值需要把下标改成字典中的键就可以了。这也正好说明字典是没有顺序的容器
dict1 = {'name':'earth', 'port':80} dict1['name'] = 'sunos5' print dict1 ------------- >{'name': 'sunos5', 'port': 80} dict1 = {'name':'earth', 'port':80} del dict1['name'] #删除键为'name'的条目 dict1.clear() #删除dict1中的所有条目 print dict1.pop('name') #删除'name'条目并返回键为'name'的值
内建函数
内建函数我们讲解2个函数和1个比较大小。
dict()
dict()函数被用来创建一个字典,且只接受一个参数,所以如果里面的参数大于1,请多用一个括号括起来。传入的参数有3种,一是空值,而是可迭代对象,三是传入一对字典(这个参数不需要限定为一个)
#传入可迭代对象时第一个是键,第二个是值 dict4 = dict((['x', 1], ['y', 2])) print dict4 ------------- >{'y': 2, 'x': 1} dict5 = dict(zip(('x', 'y'), (1, 2))) print dict5 ------------- >{'y': 2, 'x': 1} #传入字典 dict6 = dict(x=1, y=2) print dict6 ------------- >{'y': 2, 'x': 1}
len()
len()函数太灵活了,在很多地方都可以见到它,数字,序列,字典中都有它的影子,当它用在字典里面的时候,它返回的是字典里面键值对的个数
dict1 = {'name':'earth', 'port':80} print len(dict1) ------------- >2
比较大小
其实字典比较大小的机会并不多,书上说着属于高级用法了,所以这里只记录比较的一般方法和顺序,不再距离说明:
先比:字典的长度,长度越长,字典越大。
再比: 字典的键,长度相同的情况下,键越大,字典越大。
最后比: 字典的值,在长度和键相同的情况下,比较值,值越大的字典越大。
内建方法
字典的内建方法这里不想多写了,《python基础教程》里面有对字典的内建函数有详细的介绍,有机会的话,想把上面的所有函数都举例说明一遍。
字典的键的两个特性
上面说了,字典中的值是保存在键里面的,键就像大学宿舍里的一张床铺,值就是床铺上住的人。因为要住人,床铺就有一定的要求,但是床上住什么人就没有要求了。对床铺(键)的具体要求有两个:1. 不允许一张床铺睡对个人;2.床铺必须是平躺着的—键必须是可哈希的。
1.不允许一个键对应多个值
每个键对应一个值,不允许对一个键进行多个值得绑定,如果有冲突,就取最后一次赋值
2.键必须是可哈希的
所有不可变的都是可哈希的,这里面也有两个需要注意的问题。数字做键,如果数字是相等的,则键是相同的;如果是元组做键,元组里面的元素也必须都是不可变的