摘要:刪除字典元素和字典刪除鍵為的條目刪除中所有的條目刪除整個字典刪除并返回鍵為的條目二字典相關(guān)函數(shù)工廠方法工廠函數(shù)被用來創(chuàng)建字典。與函數(shù)方法相似,如果字典中鍵存在,刪除并返回,如果鍵不存在,且沒有給出的值,引發(fā)異常。
Python字典是另一種可變?nèi)萜髂P?,且可存儲任意類型對象,如字符串、?shù)字、元組等其他容器模型。
一、創(chuàng)建字典
(一)字典的增刪改查
(1)字典的創(chuàng)建
key:(不可變類型)數(shù)字、字符串、元組
value:任何類型
>>> dict1={} >>> dict2={"name": "earth", "port": 80} >>> dic1,dict2 ({}, {"name": "earth", "port": 80})
如果鍵值是列表,會報錯
>>>dict1[[1,2]]={"aa","bbb"} Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: "list"
鍵為元組:
>>> dict1[1,2]={"sss","ggg"} >>> dict1 {(1, 2): set(["ggg", "sss"]), "name": "aileen", "sex": u"u5973"}
用工廠的方法創(chuàng)建字典:
>>> fdict = dict((["x", 1], ["y", 2])) >>> fdict {"y": 2, "x": 1} >>> fdict=dict(a=3,b=4) #這個比較常用 >>> fdict {"a": 3, "b": 4}
內(nèi)建方法 fromkeys() 來創(chuàng)建一個"默認"字典:
dict.fromkeys(seq[, value]))
seq -- 字典鍵值列表。
value -- 可選參數(shù), 設(shè)置鍵序列(seq)的值。
>>> ddict = {}.fromkeys(("x", "y"), -1) >>> ddict {"y": -1, "x": -1} >>> edict = {}.fromkeys(("foo", "bar")) >>> edict {"foo": None, "bar": None}
(2)訪問字典的值:字典是無序的所以不能用索引進行訪問
>>> 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,value in dict2.items(): ... print key,value name earth port 80 >>> for value in dict2.values(): ... print value earth 80
想訪問該字典中的一個數(shù)據(jù)元素,而它在這個字典中沒有對應(yīng)的鍵,將會產(chǎn)生一個錯誤:
>>> dict2["sever"] Traceback (most recent call last): File "", line 1, in KeyError: "sever"
字典的方法:has_key()和 in 以及 not in 操作符都是布爾類型的。
對于前兩者而言,如果字典中有該鍵就返回真(True),否則返回假(False)。
>>> "sever" in dict2 #dict2.has_key("server") False >>> "name" in dict2 #dict2.has_key("name") True >>> "earth" in dict2.values() True
(3)字典的更新
通過以下幾種方式對一個字典做修改:添加一個新數(shù)據(jù)項或新元素(即:一個鍵-值對);修改一個已存在的數(shù)據(jù)項;或刪除一個已存在的數(shù)據(jù)項
>>> 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)如果字典中該鍵已經(jīng)存在,則字典中該鍵對應(yīng)的值將被新值替代。
(2)上面的 print 語句展示了另一種在字典中使用字符串格式符( %)的方法。用字典參數(shù)可以簡化 print 語句,因為這樣做你只須用到一次該字典的名字,而不用在每個元素出現(xiàn)的時候都用元組參數(shù)表示。
(4)刪除字典元素和字典
>>> del dict2["name"] #刪除鍵為”name”的條目 >>> dict2.clear() #刪除dict2中所有的條目 >>> del dict2 #刪除整個dict2字典 >>> dict2.pop("name") #刪除并返回鍵為”name”的條目
(二)字典相關(guān)函數(shù)
(1)dict()-工廠方法
工廠函數(shù)被用來創(chuàng)建字典。如果不提供參數(shù),會生成空字典
>>> dict(zip(("x", "y"), (1, 2))) {"y": 2, "x": 1} >>> dict([["x", 1], ["y", 2]]) {"y": 2, "x": 1} >>> dict([("xy"[i-1], i) for i in range(1,3)]) {"y": 2, "x": 1}
調(diào)用 dict()方法可以接受字典或關(guān)鍵字參數(shù)字典
>>> dict8=dict(x=1,y=2) >>> dict8 {"y": 2, "x": 1} >>> dict9=dict(**dict8) #只作為了解 dict()方法的用途 >>> dict9 {"y": 2, "x": 1} >>> dict9=dict8.copy() #此方法效率更好 >>> dict9 {"y": 2, "x": 1}
注:copy:dict3、dict2內(nèi)存不同,改變一個另外一個不變
>>> dict3=dict2.copy() >>> dict3 {"1": 1, "3": 3, "2": 2} >>> dict3["1"]=4 >>> dict2 {"1": 1, "3": 3, "2": 2} >>> id(dict3) 4323369880 >>> id(dict2) 4323370160 >>> id(dict2) 4323370160
引用,修改了一個另一個也改了
>>> dict4=dict2 >>> id(dict4) 4323370160 >>> id(dict2) 4323370160
(2)len()
對字典調(diào)用 len(),它會返回所有元素(鍵-值對)的數(shù)目
>>> dict2 = {"name": "earth", "port": 80} >>> len(dict2) 2
(3)hash():
判斷某個對象是否可以做一個字典的鍵,如果非可哈希類型作為參數(shù)傳遞給 hash()方法,會產(chǎn)生TypeError 錯誤.返回的是返回 obj 的哈希值
>>> hash(3) 3 >>> hash([]) Traceback (most recent call last): File "", line 1, in TypeError: unhashable type: "list" >>> dict2[{}]="foo" Traceback (most recent call last): File " ", line 1, in TypeError: unhashable type: "dict"
(4)update函數(shù)
可以用來將一個字典的內(nèi)容添加到另外一個字典中,字典中原有的鍵如果與新添加的鍵重復(fù),那么重復(fù)鍵所對應(yīng)的原有條目的值將被新鍵所對應(yīng)的值所覆蓋。原來不存在的條目則被添加到字典中。
>>> dict2= {"host":"earth", "port":80} >>> dict3= {"host":"venus", "server":"http"} >>> dict2.update(dict3) >>> dict2 {"host": "venus", "port": 80, "server": "http"} >>>?dict2.update({"ip":"192.168.1.1"}) >>> dict2 {"ip": "192.168.1.1", "host": "venus", "port": 80, "server": "http"}
(5)get()方法
get方法與鍵查找(key-lookup)操作符( [ ] )相似,不同的是它允許你為不存在的
鍵提供默認值。如果該鍵不存在,也未給出它的默認值,則返回 None。此方法比采用鍵查找(key-lookup)更靈活,因為你不必擔心因鍵不存在而引發(fā)異常。
dict的get方法:
>>> dict2 {"ip": "192.168.1.1", "host": "venus", "port": 80, "server": "http"} >>> dict2.get("host") "venus" >>> dict2.get("XXX") >>> type(dict2.get("XXX"))>>> dict2.get("XXX","no such key") "no such key"
(6)Setdefault
檢查字典中是否含有某鍵。 如果字典中這個鍵存在,你可以取到它的值。 如果所找的鍵在字典中不存在,你可以給這個鍵賦默認值并返回此值。
>>> myDict = {"host": "earth", "port": 80} >>> myDict.keys() ["host", "port"] >>> myDict.items() [("host", "earth"), ("port", 80)] >>> myDict.setdefault("port",8080) 80 >>> myDict.setdefault("pot","tcp") "tcp" >>> myDict.items() [("host", "earth"), ("port", 80), ("pot", "tcp")]
(7)Fromkeys(seq,value=None)
創(chuàng)建并返回一個新字典,以 seq 中的元素做該字典的鍵,val 做該字典中所有鍵對應(yīng)的初始值(如果不提供此值,則默認為 None)
>>> {}.fromkeys("xyz") {"y": None, "x": None, "z": None} >>> {}.fromkeys(("love", "honor"), True) {"love": True, "honor": True}
(8)Sorted()
dic?=?{"a":31,?"bc":5,?"c":3,?"asd":4,?"33":56,?"d":0} print?sorted(dic.iteritems(),?key=lambda?d:d[0],?reverse?=?False?)
按照value 排序:
dic?=?{"a":31,?"bc":5,?"c":3,?"asd":4,?"33":56,?"d":0} print?sorted(dic.iteritems(),?key=lambda?d:d[1],?reverse?=?False?)
可以用以下方法做
>>>?d={3:13,2:12,1:21} >>>?sorted_key=sorted(d.keys()) >>>?for?i?in?sorted_key: ...?????print?"%s?=%s?"?%(i,d[i])
(9)dict.iter()
方法 iteritems(), iterkeys(), itervalues()與它們對應(yīng)的非迭代方法一樣,不同的是它們返回一個迭代器,而不是一個列表。
(10)dict.pop(key[, default]) 與popitem函數(shù)
方法 get()相似,如果字典中 key 鍵存在,刪除并返回 dict[key],
如果 key 鍵不存在,且沒有給出 default 的值,引發(fā) KeyError 異常。
>>> myDict {"host": "earth", "port": 80, "pot": "tcp"} >>> myDict.pop("host") #pop "earth" >>> myDict.pop("hostt","none") "none" >>> myDict.pop("hostt") Traceback (most recent call last): File "", line 1, in KeyError: "hostt" >>> myDict.popitem() #popitem ("host", "earth") >>> myDict.popitem() ("port", 80) >>> myDict.popitem() ("pot", "tcp") >>> myDict.popitem() Traceback (most recent call last): File " ", line 1, in KeyError: "popitem(): dictionary is empty"
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40896.html
摘要:這種數(shù)據(jù)結(jié)構(gòu)包含以下幾種常見的操作向關(guān)聯(lián)數(shù)組添加鍵值對從關(guān)聯(lián)數(shù)組內(nèi)刪除鍵值對修改關(guān)聯(lián)數(shù)組內(nèi)的鍵值對根據(jù)已知的鍵尋找值字典問題是設(shè)計一種能夠具備關(guān)聯(lián)數(shù)組特性的數(shù)據(jù)結(jié)構(gòu)。 定義 Python中有一個叫作dictionary的對象類型,翻譯過來就是字典,用dict表示。 創(chuàng)建字典 創(chuàng)建空的字典 >>> mydict = {} >>> mydict {} >>> type(mydict) >...
摘要:字典在基本的數(shù)據(jù)類型中使用頻率也是相當高的,而且它的訪問方式是通過鍵來獲取到對應(yīng)的值,當然存儲的方式也是鍵值對了,屬于可變類型。 字典(dict)在基本的數(shù)據(jù)類型中使用頻率也是相當高的,而且它的訪問方式是通過鍵來獲取到對應(yīng)的值,當然存儲的方式也是鍵值對了,屬于可變類型。 創(chuàng)建字典的兩種方式 第一種 >>> dic = {k1:123,k2:456} >>> dic {k1: 123, ...
摘要:常量的值近似為。在后傳入一個整數(shù)可以保證該域至少有這么多的寬度表示浮點數(shù)保留位小數(shù)常量的值近似為。 1. 數(shù)字 類型 int, float, bool, complex type() 查看變量類型 isinstance(a, int) 查看變量類型 showImg(https://segmentfault.com/img/remote/1460000016789047); 運算符 ...
摘要:布爾值布爾值和布爾代數(shù)的表示完全一致,一個布爾值只有兩種值的數(shù)據(jù)類型可以通過內(nèi)置的函數(shù)查詢,例如還可以用來判斷和的區(qū)別在于不會認為子類是一種父類類型。會認為子類是一種父類類型?;竟δ苁沁M行成員關(guān)系測試和刪除重復(fù)元素。 ...
目錄Numpy簡介Numpy操作集合1、不同維度數(shù)據(jù)的表示1.1 一維數(shù)據(jù)的表示1.2 二維數(shù)據(jù)的表示1.3 三維數(shù)據(jù)的表示2、 為什么要使用Numpy2.1、Numpy的ndarray具有廣播功能2.2 Numpy數(shù)組的性能比Python原生數(shù)據(jù)類型高3 ndarray的屬性和基本操作3.1 ndarray的基本屬性3.2 ndarray元素類型3.3 創(chuàng)建ndarray的方式3.4 ndarr...
閱讀 3549·2021-11-18 13:22
閱讀 2564·2021-09-23 11:53
閱讀 735·2019-08-30 13:17
閱讀 1352·2019-08-30 13:12
閱讀 904·2019-08-29 15:43
閱讀 1108·2019-08-29 12:53
閱讀 2834·2019-08-26 18:27
閱讀 1506·2019-08-26 11:52