1.字典是python语言中唯一的映射类型,映射类型对象里的哈希值(键,key)和指向的对象(值,value)是一对多的关系
2.一个字典对象时可变的,他是一个容器类型,字典类型和序列类型的区别就是存储和访问数据的方式不同,序列类型只用数字类型的键,映射类型可以用其他对象类型做键,映射类型的键直接和间接的和存储的数据值相关联。
3.映射类型通常被称为hash表,是因为字典对象就是hash类型的,哈希表是一种数据结构,哈希表中存储的每一个数据叫做一个值,这是根据与他相关的被称为键的数据项进行存储的
4.创建和访问字典
>>> d={'a':1,'b':3} #初始化一个字典
>>> d
{'a': 1, 'b': 3}
>>> c={}
>>> c['c']=6 #同样可以往字典中添加元素
>>> c
{'c': 6}
>>>
>>> d
{'a': 1, 'b': 3}
>>> d['a'] #通过指定一个键值访问字典中对应的元素
1
5.要想遍历一个字典,我们只需要循环查看他的键值,可以用keys()方法获取循环使用的键值
>>> d
{'a': 1, 'b': 3}
>>> for key in d.keys():
... print "key=%s,value=%s"%(key,d[key])
...
key=a,value=1
key=b,value=3
6.要判断一个键值是否在字典中,有两种方法,一是使用字典的has_key()方法,或是用in 或者not in操作符,前者已经快被遗忘了
>>> d
{'a': 1, 'b': 3}
>>>
>>>
>>> 'a' in d
True
>>> d.has_key('b')
True
>>> d.has_key('c')
False
>>>
7.删除一个字典
>>> d
{'a': 1, 'b': 3}
>>> del d['a'] #删除键为a的条目
>>> d
{'b': 3}
>>> del d #删除整个字典,对象已经不存在
>>> d
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'd' is not defined
>>> d={'a':1,'b':3}
>>> d.clear() #删除字典中的元素,字典还在
>>> d
{}
>>> d={'a':1,'b':3}
>>> d.pop('a') #删除并返回键为‘a’的条目
1
>>> d
{'b': 3}
>>>
8.字典可以和所有标准类型的操作符一起工作,但却不支持像拼接和重复这样的操作。这些操作对序列有意义,可对映射类型行不通。
9.键查找操作符是唯一仅用于字典类型的操作符,对于字典来说,是用键来查询字典中的元素,所以键是参数,而不是一个索引
10.字典是通过算法来比较的,首先是字典的大小,然后是键,最后是值
11.dict()工厂函数也可以被用于创建字典,如果不提供参数会生成空字典。
>>> d=dict()
>>> d
{}
>>> d['m']=44
>>> d
{'m': 44}
>>>
>>> d=dict(k='m',j=4) #初始化格式
>>> d
{'k': 'm', 'j': 4}
>>>
12.如果想把一个字典赋值给另一个字典,推荐使用copy()函数
如果是直接赋值
>>> d
{'k': 'm', 'j': 4}
>>> c=d
>>> d
{'k': 'm', 'j': 4}
>>> c
{'k': 'm', 'j': 4}
>>> d['k']='haha'
一个发生改变,两个都会改变
>>>> d
{'k': 'haha', 'j': 4}
>>> c
{'k': 'haha', 'j': 4}
如果是是使用copy()函数
>>> d
{'k': 'haha', 'j': 4}
>>> c=d.copy()
>>> c
{'k': 'haha', 'j': 4}
>>> d['k']='m'
>一个发生改变并不会影响另一个字典
>>> d
{'k': 'm', 'j': 4}
>>> c
{'k': 'haha', 'j': 4}
12.三个映射类型的相关函数
>>> d=dict(k='m',j=4) #初始化格式
>>> d
{'k': 'm', 'j': 4}
>>>
>>> c
{'k': 'haha', 'j': 4}
>>> len(c)
2
>>> hash('ff') #返回对象的hash值
628535766
>>>
13.映射类型的内建方法
>>> d={'a':1,'b':2,'c':3}
>>> d
{'a': 1, 'c': 3, 'b': 2}
>>> d.get('c',default=0) #返回c键对应的值,没有就返回default的值
3
>>> d.items() "返回一个包含字典中的键,值对的元祖的列表"
[('a', 1), ('c', 3), ('b', 2)]
>>>
>>> d
{'a': 1, 'c': 3, 'b': 2}
>>> c={'k':10}
>>> d.update(c)#与extend()方法类似,如果有相同的键,那么新键将替代旧键对应的值
>>> d
{'a': 1, 'c': 3, 'b': 2, 'k': 10}
>>> m=d.iteritems()
"返回一个迭代器,每次迭代返回一个包含字典中的键,值对的元组"
>>>m
<dictionary-itemiterator object at 0x00000000036DEF98
>>> [(key,value) for key,value in m]
[('a', 1), ('c', 3), ('b', 2), ('k', 10)]
>>>
>>> m=d.iterkeys()
"返回一个迭代器,每次迭代返回一个包含在字典中的键"
>>> m
<dictionary-keyiterator object at 0x00000000036DEF98>
>>> [key for key in m]
['a', 'c', 'b', 'k']
>>> m=d.itervalues()
"返回一个迭代器,每次迭代返回一个包含在字典中的值"
>>> m
<dictionary-valueiterator object at 0x00000000036DEF48>
>>> [key for key in m]
[1, 3, 2, 10]
>>>
14.不允许一个键对应多个值,当有键发送冲突 的时候,取最后一次的赋值