定义一个字典

>>> d = {\"server\":\"mpilgrim\", \"database\":\"master\"} 1
>>> d
{\'server\': \'mpilgrim\', \'database\': \'master\'}
>>> d[\"server\"]         2
\'mpilgrim\'
>>> d[\"database\"]         3
\'master\'
>>> d[\"mpilgrim\"]         4

Traceback (innermost last):
  File \"\", line 1, in ?
KeyError: mpilgrim

首先,我们创建了一个拥有两个元素的新字典,并将其赋值给变量 d。每一个元素都是一个键-值对,整个元素集合用大括号括起来。
server 是一个键字,它所关联的值为 mpilgrim,用 d[\”server\”] 来引用。
database 是一个键字,它所关联的值为 master,用 d[\”database\”] 来引用。
 

你可以通过键字来得到值,但是不能通过值得到键字。所以 d[\”server\”] 为 mpilgrim,但是使用 d[\”mpilgrim\”] 会引发一个异常,因为 mpilgrim 不是一个键字。

修改一个字典

>>> 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

字典没有元素顺序的概念。说元素顺序乱了是不正确的,它们只是简单的无序。这是一个重要的特性,它会在你想要以一种特定的,可重复的顺序(象以键字的字母表顺序)存取字典元素的时候骚扰你。有一些实现的方法,它们只是没有加到字典中去。

在字典中混用数据类型

>>> 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}

字典不是只用于字符串。字典的值可以是任意数据类型,包括字符串,整数,对象,或者甚至其它的字典。在一个单个字典里,字典的值并不需要全都是同一数据类型,可以根据需要混用和配匹。
字典的关键字要严格一些,但是它们可以是字符串,整数和几种其它的类型(后面还会谈到这一点)。也可以在一个字典中混用和配匹关键字。

从字典中删除元素

>>> 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 会删除一个字典中所有元素。注意空的大括号所表示的集合说明一个字典没有元素。

字符串是大小写敏感

>>> 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来说,完全是不同的。

如何访问字典中的值:

>>> 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

获取字典某个元素值:

>>> 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

>>> \'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

一个字典中混用数字和字符串的例子:

>>> dict3 = {}

>>> dict3[1] = \'abc\'

>>> dict3[\'1\'] = 3.14159

>>> dict3[3.2] = \'xyz\'

>>> dict3

{\'1\': 3.14159, 1: \'abc\', 3.2: \'xyz\'}

整体赋值:

>>> dict3 = {\'1\': 3.14159, 1: \'abc\', 3.2: \'xyz\',33:\'hehe\'}

>>> dict3

{\'1\': 3.14159, 1: \'abc\', 3.2: \'xyz\', 33: \'hehe\'}

更新字典:

>>> 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

删除字典元素和字典

>>> 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 \"\", line 1, in 

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