字典是可变的,并且可以存储任意数量的Python对象,包括其他容器类型另一个容器类型。字典包括键对(称为项目)及其相应的值。
Python字典也被称为关联数组或哈希表。字典的一般语法如下:
1
|
dict = { 'Alice' : '2341' , 'Beth' : '9102' , 'Cecil' : '3258' }
|
可以用下面的方式创建字典:
1
2
|
dict1 = { 'abc' : 456 };
dict2 = { 'abc' : 123 , 98.6 : 37 };
|
每个按键都来自它的值用冒号(:),该项目以逗号分隔,整个事情是包含在大括号分隔。没有任何项目一个空的字典是写只有两个大括号,就像这样:{}
键在一个字典中是唯一的,而值可能不是。字典的值可以是任何类型的,但键必须是不可变的数据类型,例如字符串,数字,或元组。
访问字典的值:
要访问字典元素,您可以使用熟悉的方括号一起的关键,获得它的值。下面是一个简单的例子:
1
2
3
4
5
6
|
#!/usr/bin/python
dict = { 'Name' : 'Zara' , 'Age' : 7 , 'Class' : 'First' };
print "dict['Name']: " , dict [ 'Name' ];
print "dict['Age']: " , dict [ 'Age' ];
|
当执行上面的代码中,产生以下结果:
1
2
|
dict [ 'Name' ]: Zara
dict [ 'Age' ]: 7
|
如果要访问一个不存在的键,这会得到一个错误,如下所示:
1
2
3
4
5
|
#!/usr/bin/python
dict = { 'Name' : 'Zara' , 'Age' : 7 , 'Class' : 'First' };
print "dict['Alice']: " , dict [ 'Alice' ];
|
当执行上面的代码,产生以下结果:
1
2
3
4
5
|
dict [ 'Zara' ]:
Traceback (most recent call last):
File "test.py" , line 4 , in <module>
print "dict['Alice']: " , dict [ 'Alice' ];
KeyError: 'Alice'
|
更新字典:
可以通过添加一个新条目或项目(即一个键 - 值对),修改现有条目或删除。作为简单的例子,如下图所示在现有条目更新字词:
1
2
3
4
5
6
7
8
9
10
|
#!/usr/bin/python
dict = { 'Name' : 'Zara' , 'Age' : 7 , 'Class' : 'First' };
dict [ 'Age' ] = 8 ; # update existing entry
dict [ 'School' ] = "DPS School" ; # Add new entry
print "dict['Age']: " , dict [ 'Age' ];
print "dict['School']: " , dict [ 'School' ];
|
当执行上面的代码,产生以下结果:
1
2
|
dict [ 'Age' ]: 8
dict [ 'School' ]: DPS School
|
删除字典元素:
可以删除单个字典元素或清除字典中的全部内容。也可以删除整个字典在一个单一的操作。
要删除整个字典,只要用del语句。下面是一个简单的例子:
1
2
3
4
5
6
7
8
9
10
|
#!/usr/bin/python
dict = { 'Name' : 'Zara' , 'Age' : 7 , 'Class' : 'First' };
del dict [ 'Name' ]; # remove entry with key 'Name'
dict .clear(); # remove all entries in dict
del dict ; # delete entire dictionary
print "dict['Age']: " , dict [ 'Age' ];
print "dict['School']: " , dict [ 'School' ];
|
这将产生以下结果。注意引发异常,这是因为经过del dict删除,字典已经不存在了:
1
2
3
4
5
|
dict [ 'Age' ]:
Traceback (most recent call last):
File "test.py" , line 8 , in <module>
print "dict['Age']: " , dict [ 'Age' ];
TypeError: 'type' object is unsubscriptable
|
注:del()方法会在后续的章节中讨论。
字典的键的属性:
字典值没有限制。它们可以是任意Python对象,无论是标准的对象或用户定义的对象。但是作为键,是不可以这样的。
要记住字典中的键的两个要点:
(一)不准一个键对应多个条目。这意味着不能有重复的键。当有重复的键,在分配过程中以最后分配的为准。下面是一个简单的例子:
1
2
3
4
5
|
#!/usr/bin/python
dict = { 'Name' : 'Zara' , 'Age' : 7 , 'Name' : 'Manni' };
print "dict['Name']: " , dict [ 'Name' ];
|
当执行上面的代码,产生以下结果:
1
|
dict [ 'Name' ]: Manni
|
(二)键的值字必须是不可变的。这意味着可以使用字符串,数字或元组作为字典的键,但像['key']是不允许的。下面是一个简单的例子:
1
2
3
4
5
|
#!/usr/bin/python
dict = {[ 'Name' ]: 'Zara' , 'Age' : 7 };
print "dict['Name']: " , dict [ 'Name' ];
|
当执行上面的代码,产生以下结果:
1
2
3
4
|
Traceback (most recent call last):
File "test.py" , line 3 , in <module>
dict = {[ 'Name' ]: 'Zara' , 'Age' : 7 };
TypeError: list objects are unhashable
|