Python中字典的基础知识归纳小结
定义一个字典
>>>d={"server":"mpilgrim","database":"master"}1 >>>d {'server':'mpilgrim','database':'master'} >>>d["server"]2 'mpilgrim' >>>d["database"]3 'master' >>>d["mpilgrim"]4Traceback(innermostlast):
File"<interactiveinput>",line1,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"]=31 >>>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} >>>deld[42]1 >>>d {'server':'mpilgrim','uid':'sa','database':'master','retrycount':3} >>>d.clear()2 >>>d {}
del允许你根据键字将单个元素从字典中删除。
clear会删除一个字典中所有元素。注意空的大括号所表示的集合说明一个字典没有元素。
字符串是大小写敏感
>>>d={} >>>d["key"]="value" >>>d["key"]="othervalue"1 >>>d {'key':'othervalue'} >>>d["Key"]="thirdvalue"2 >>>d {'Key':'thirdvalue','key':'othervalue'}
将一个值赋给一个存在的字典关键字只是简单的用新值替换旧值。
这样做不会将一个值赋给一个存在的字典关键字,因为在Python中字符串是大小写敏感的,所以'key'与'Key'是不同的。这样就在字典中生成了一个新的键/值对。对你来说可能差不多,但对于Python来说,完全是不同的。
如何访问字典中的值:
>>>dict2={'name':'earth','port':80} >>>forkeyindict2.keys(): ...print'key=%s,value=%s'%(key,dict2[key]) ... key=name,value=earth key=port,value=80 >>>forkeyindict2: ...print'key=%s,value=%s'%(key,dict2[key]) ... key=name,value=earth key=port,value=80
获取字典某个元素值:
>>>dict2['name'] 'earth' >>>print'host%sisrunningonport%d'%(dict2['name'],dict2['port']) hostearthisrunningonport80
检查字典中是否有某个键的方法has_key()或in,notin
>>>'name'indict2 True >>>'server'indict2 False >>>'name'indict2 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)sisrunningonport%(port)d'%dict2 hostvenusisrunningonport6969
删除字典元素和字典
>>>dict2 {'arch':'sunos5','name':'venus','port':6969} >>>deldict2['name'] >>>dict2 {'arch':'sunos5','port':6969} >>>dict2.clear() >>>dict2 {} >>>deldict2 >>>dict2 Traceback(mostrecentcalllast): File"<stdin>",line1,in<module> NameError:name'dict2'isnotdefined >>>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