定义一个字典
1
2
3
4
5
6
7
8
9
|
>>> d = { "server" : "mpilgrim" , "database" : "master" } 1
>>> d
{ 'server' : 'mpilgrim' , 'database' : 'master' }
>>> d[ "server" ] 2
'mpilgrim'
>>> d[ "database" ] 3
'master'
>>> d[ "mpilgrim" ] 4
<p>Traceback (innermost last):<br> File "<interactive input>" , line 1 , in ?<br>KeyError: mpilgrim< / p>
|
首先,我们创建了一个拥有两个元素的新字典,并将其赋值给变量 d。每一个元素都是一个键-值对,整个元素集合用大括号括起来。
server 是一个键字,它所关联的值为 mpilgrim,用 d["server"] 来引用。
database 是一个键字,它所关联的值为 master,用 d["database"] 来引用。
你可以通过键字来得到值,但是不能通过值得到键字。所以 d["server"] 为 mpilgrim,但是使用 d["mpilgrim"] 会引发一个异常,因为 mpilgrim 不是一个键字。
修改一个字典
1
2
3
4
5
6
7
8
|
>>> d
{ 'server' : 'mpilgrim' , 'database' : 'master' }
>>> d[ "database" ] = "pubs" 1
>>> d
{ 'server' : 'mpilgrim' , 'database' : 'pubs' }
>>> d[ "uid" ] = "sa" 2
>>> d
{ 'server' : 'mpilgrim' , 'uid' : 'sa' , 'database' : 'pubs' }
|
不能在一个字典中有重复的键字。给一个存在的键字赋值会抹掉原来的值。
可以在任何时候加入新的键-值对。这种语法同修改存在的值一样。(是的,它可能某天会给你带来麻烦,你可能认为增加了新值,但实际上只是反复地修改了同样的值,因为你的键字没有按照你的想象改变。)
注意新的元素(键字为 uid,值为 sa)出现在字典中间。实际上,它只不过是一种巧合,在第一个例子中的元素看上去是有序的。现在它们看上去无序了则更是一种巧合。
Note
字典没有元素顺序的概念。说元素顺序乱了是不正确的,它们只是简单的无序。这是一个重要的特性,它会在你想要以一种特定的,可重复的顺序(象以键字的字母表顺序)存取字典元素的时候骚扰你。有一些实现的方法,它们只是没有加到字典中去。
在字典中混用数据类型
1
2
3
4
5
6
7
8
|
>>> d
{ 'server' : 'mpilgrim' , 'uid' : 'sa' , 'database' : 'pubs' }
>>> d[ "retrycount" ] = 3 1
>>> d
{ 'server' : 'mpilgrim' , 'uid' : 'sa' , 'database' : 'master' , 'retrycount' : 3 }
>>> d[ 42 ] = "douglas" 2
>>> d
{ 'server' : 'mpilgrim' , 'uid' : 'sa' , 'database' : 'master' , 42 : 'douglas' , 'retrycount' : 3 }
|
字典不是只用于字符串。字典的值可以是任意数据类型,包括字符串,整数,对象,或者甚至其它的字典。在一个单个字典里,字典的值并不需要全都是同一数据类型,可以根据需要混用和配匹。
字典的关键字要严格一些,但是它们可以是字符串,整数和几种其它的类型(后面还会谈到这一点)。也可以在一个字典中混用和配匹关键字。
从字典中删除元素
1
2
3
4
5
6
7
8
|
>>> d
{ 'server' : 'mpilgrim' , 'uid' : 'sa' , 'database' : 'master' , 42 : 'douglas' , 'retrycount' : 3 }
>>> del d[ 42 ] 1
>>> d
{ 'server' : 'mpilgrim' , 'uid' : 'sa' , 'database' : 'master' , 'retrycount' : 3 }
>>> d.clear() 2
>>> d
{}
|
del 允许你根据键字将单个元素从字典中删除。
clear 会删除一个字典中所有元素。注意空的大括号所表示的集合说明一个字典没有元素。
字符串是大小写敏感
1
2
3
4
5
6
7
8
|
>>> d = {}
>>> d[ "key" ] = "value"
>>> d[ "key" ] = "other value" 1
>>> d
{ 'key' : 'other value' }
>>> d[ "Key" ] = "third value" 2
>>> d
{ 'Key' : 'third value' , 'key' : 'other value' }
|
将一个值赋给一个存在的字典关键字只是简单的用新值替换旧值。
这样做不会将一个值赋给一个存在的字典关键字,因为在Python中字符串是大小写敏感的,所以 'key' 与 'Key' 是不同的。这样就在字典中生成了一个新的键/值对。对你来说可能差不多,但对于Python来说,完全是不同的。
如何访问字典中的值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
>>> dict2 = { 'name' : 'earth' , 'port' : 80 }
>>> for key in dict2.keys():
... print 'key=%s,value=%s' % (key,dict2[key])
...
key = name,value = earth
key = port,value = 80
>>> for key in dict2:
... print 'key=%s,value=%s' % (key,dict2[key])
...
key = name,value = earth
key = port,value = 80
|
获取字典某个元素值:
1
2
3
4
5
6
7
|
>>> dict2[ 'name' ]
'earth'
>>> print 'host %s is running on port %d' % (dict2[ 'name' ],dict2[ 'port' ])
host earth is running on port 80
|
检查字典中是否有某个键的方法 has_key()或in,not in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
>>> 'name' in dict2
True
>>> 'server' in dict2
False
>>> 'name' in dict2
True
>>> dict2[ 'name' ]
'earth'
>>> dict2.has_key( 'server' )
False
>>> dict2.has_key( 'name' )
True
|
一个字典中混用数字和字符串的例子:
1
2
3
4
5
6
7
8
9
10
11
|
>>> dict3 = {}
>>> dict3[ 1 ] = 'abc'
>>> dict3[ '1' ] = 3.14159
>>> dict3[ 3.2 ] = 'xyz'
>>> dict3
{ '1' : 3.14159 , 1 : 'abc' , 3.2 : 'xyz' }
|
整体赋值:
1
2
3
4
5
|
>>> dict3 = { '1' : 3.14159 , 1 : 'abc' , 3.2 : 'xyz' , 33 : 'hehe' }
>>> dict3
{ '1' : 3.14159 , 1 : 'abc' , 3.2 : 'xyz' , 33 : 'hehe' }
|
更新字典:
1
2
3
4
5
6
7
8
9
|
>>> dict2[ 'name' ] = 'venus'
>>> dict2[ 'port' ] = 6969
>>> dict2[ 'arch' ] = 'sunos5'
>>> print 'host %(name)s is running on port %(port)d' % dict2
host venus is running on port 6969
|
删除字典元素和字典
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
>>> dict2
{ 'arch' : 'sunos5' , 'name' : 'venus' , 'port' : 6969 }
>>> del dict2[ 'name' ]
>>> dict2
{ 'arch' : 'sunos5' , 'port' : 6969 }
>>> dict2.clear()
>>> dict2
{}
>>> del dict2
>>> dict2
Traceback (most recent call last):
File "<stdin>" , line 1 , in <module>
NameError: name 'dict2' is not defined
>>> dict3
{ '1' : 3.14159 , 1 : 'abc' , 3.2 : 'xyz' , 33 : 'hehe' }
>>> dict3.pop( 33 )
'hehe'
>>> dict3
{ '1' : 3.14159 , 1 : 'abc' , 3.2 : 'xyz' }
|
注:避免使用内建对象名字作为变量的标识符
类似: dict,list,file,bool,str,input,len