字典是python语言中唯一的映射类型。映射类型对象里哈希值(键,key)和指向的对象(值,value)
是一对多的关系。通常被认为是可变的哈希表。一个字典对象是可变的,它是一个容器类型,能存储
任意个数的python对象,其中也包括其他容器类型。字典类型和序列类型容器类(列表、元组)的区别
是存储和访问数据的方式不同。序列类型只用数字类型的键(从序列的开始起按数值顺序索引)。映射
类型可以用其他对象类型做键,一般最常见的是用字符串做键。和序列类型的键不同,影像类型的键直接
或间接地和存储的数据值相关联。但因为在映射类型中,我们不再用“序列化排序”的键,所以映像类型
中的数据是无序排列的。

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。
Dict = {key1 : value1, key2 : value2}
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
举一个字典例子:
dict = {'taokey':'10','taoyake':'20','jack':'30'}
dict
{'taokey': '10', 'taoyake': '20', 'jack': '30'}
>>> dict['taokey']
'10'
>>> dict['jack']
'30'
>>> D1={'hello':'1991'}
>>> D2={'cc':11,19:78}
>>> D1
{'hello': '1991'}
>>> D2
{'cc': 11, 19: 78}

如何访问字典中的值
要想遍历一个字典(一般用键),你只需要循环查看它的键

1
2
3
4
5
6
7
>>> dict = {'taokey':'10','taoyake':'20','jack':'30'}
>>> for key in dict.keys():
... print key
...
taokey
taoyake
jack

如何更新字典

1
2
3
4
5
6
>>> dict['taokey']='tom'
>>> dict
{'taokey': 'tom', 'taoyake': '20', 'jack': '30'}
>>> dict['jack']='andy'
>>> dict
{'taokey': 'tom', 'taoyake': '20', 'jack': 'andy'}

如何删除字典元素和字典

1
2
3
4
5
>>> dict
{'taokey': 'tom', 'taoyake': '20', 'jack': 'andy'}
>>> del dict['taokey']
>>> dict
{'taoyake': '20', 'jack': 'andy'}

删除整个字典

1
2
3
4
5
6
7
8
9
10
>>> del dict
>>> dict
<type 'dict'>
>>> dict = {'taokey':'10','taoyake':'20','jack':'30'}
>>> dict
{'taokey': '10', 'taoyake': '20', 'jack': '30'}
>>> dict.pop('jack')
'30'
>>> dict
{'taokey': '10', 'taoyake': '20'}

字典的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,前边的键会被最后一个键覆盖

1
2
3
>>> dict = {'jack':'10','taoyake':'20','jack':'30'}
>>> dict['jack']
'30'

2)键必须不可变,所以可以用数,字符串或元组充当,所以用列表就不行

1
2
3
4
5
>>> dict = {['taokey']:'10','taoyake':'20','jack':'30'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
例子就是使用一个列表当做键,但是报错了,说是类型是一个list.

字典内置函数&方法
Python字典包含了以下内置函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1、cmp(dict1, dict2):比较两个字典元素。
>>> dict1 = {}
>>> dict1
{}
>>> dict2 = {'Name':'taokey','age':'26'}
>>> cmp(dict1,dict2)
-1
>>> dict1['Name']='taokey'
>>> cmp(dict1,dict2)
-1
>>> dict1['age']='27'
>>> cmp(dict1,dict2)
1
>>> dict1['age']='26'
>>> cmp(dict1,dict2)
0

在第一个比较中,dict1比dict2小,因为dict2有更多元素。在向dict1添加一个元素后,dict1仍然比dict2小,
第三个比较,dict1要比dict2大,第四个比较就是相等的,就是0了。
2、len(dict):计算字典元素个数,即键的总数。

1
2
3
4
5
6
>>> dict2 = {'Name':'taokey','age':'26'}
>>> len(dict2)
2
>>> dict1 = {'Name':'taokey','age':'26','job':'IT'}
>>> len(dict1)
3

3、str(dict):输出字典可打印的字符串表示。

1
2
>>> str(dict1)
"{'job': 'IT', 'age': '26', 'Name': 'taokey'}"

4、type(variable):返回输入的变量类型,如果变量是字典就返回字典类型。

1
2
>>> type(dict1)
<type 'dict'>

Python字典包含了以下内置方法:

1、dict.clear():删除字典内所有元素

1
2
3
4
5
>>> dict1
{'job': 'IT', 'age': '26', 'Name': 'taokey'}
>>> dict1.clear()
>>> dict1
{}

2、dict.copy():返回一个字典的浅复制

1
2
3
4
5
6
7
>>> dict1 = {'Name':'taokey','age':'26','job':'IT'}
>>> dict2.clear()
>>> dict2
{}
>>> dict2=dict1.copy()
>>> dict2
{'job': 'IT', 'age': '26', 'Name': 'taokey'}

3、dict.fromkeys():创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
dict.fromkeys(seq[, value]))

1
2
3
4
5
6
>>> seq = ('name','age','job')
>>> dict1.clear()
>>> dict1
{}
>>> dict1.fromkeys(seq)
{'job': None, 'age': None, 'name': None}

4、dict.get(key, default=None):返回指定键的值,如果值不在字典中返回default值

1
2
3
4
5
6
7
8
>>> dict1 = {'Name':'taokey','age':'26','job':'IT'}
>>> dict1.get('Name')
'taokey'
>>> dict1.get('age')
'26'
>>> dict1.get('work')
>>> type(dict1.get('work'))
<type 'NoneType'

5、dict.has_key(key):如果键在字典dict里返回true,否则返回false

1
2
3
4
5
6
7
>>> dict1 = {'Name':'taokey','age':'26','job':'IT'}
>>> dict1.has_key('age')
True
>>> dict1.has_key('hi')
False
>>> dict1.has_key('job')
True

6、dict.items():以列表返回可遍历的(键, 值) 元组数组

1
2
3
>>> dict1 = {'Name':'taokey','age':'26','job':'IT'}
>>> dict1.items()
[('job', 'IT'), ('age', '26'), ('Name', 'taokey')]

7、dict.keys():以列表返回一个字典所有的键

1
2
3
>>> dict1 = {'Name':'taokey','age':'26','job':'IT'}
>>> dict1.keys()
['job', 'age', 'Name']

8、dict.setdefault(key, default=None):和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default

1
2
3
4
5
6
7
8
9
>>> hello={}
>>> hello
{}
>>> hello.setdefault('a',1)
1
>>> hello.setdefault('a',2)
1
>>> hello
{'a': 1}

9、dict.update(dict2):把字典dict2的键/值对更新到dict里

1
2
3
4
5
>>> dict1 = {'Name':'jack','age':'30'}
>>> dict2 = {'sex':'1'}
>>> dict1.update(dict2)
>>> dict1
{'age': '30', 'Name': 'jack', 'sex': '1'}

10、dict.values():以列表返回字典中的所有值

1
2
3
>>> dict1 = {'Name':'taokey','age':'26','job':'IT'}
>>> dict1.values()
['IT', '26', 'taokey']