python学习笔记(四)字典(dict)
創建 dict
方法 1:
創建一個空的 dict,這個空 dict,可以在以后向里面加東西用。
>>> mydict = {} >>> mydict {}不要小看“空”,“色即是空,空即是色”,在編程中,“空”是很重要。一般帶“空”字的人都很有名,比如孫悟空,哦。好像他應該是猴、或者是神。舉一個人的名字,帶“空”字,你懂得。
創建有內容的 dict。
>>> person = {"name":"qiwsir","site":"qiwsir.github.io","language":"python"} >>> person {'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'}"name":"qiwsir",有一個優雅的名字:鍵值對。前面的 name 叫做鍵(key),后面的 qiwsir 是前面的鍵所對應的值(value)。在一個 dict 中,鍵是唯一的,不能重復。值則是對應于鍵,值可以重復。鍵值之間用(:)英文的分號,每一對鍵值之間用英文的逗號(,)隔開。
>>> person['name2']="qiwsir" #這是一種向 dict 中增加鍵值對的方法 >>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'Python', 'site': 'qiwsir.github.io'}用這樣的方法可以向一個 dict 類型的數據中增加“鍵值對”,也可以說是增加數值。那么,增加了值之后,那個字典還是原來的嗎?也就是也要同樣探討一下,字典是否能原地修改?(列表可以,所以列表是可變的;字符串和元組都不行,所以它們是不可變的。)
>>> ad = {} >>> id(ad) 3072770636L >>> ad["name"] = "qiwsir" >>> ad {'name': 'qiwsir'} >>> id(ad) 3072770636L實驗表明,字典可以原地修改,即它是可變的。
方法 2:
利用元組在建構字典,方法如下:
>>> name = (["first","Google"],["second","Yahoo"]) >>> website = dict(name) >>> website {'second': 'Yahoo', 'first': 'Google'}或者用這樣的方法:
>>> ad = dict(name="qiwsir", age=42) >>> ad {'age': 42, 'name': 'qiwsir'}方法 3:
這個方法,跟上面的不同在于使用 fromkeys
>>> website = {}.fromkeys(("third","forth"),"facebook") >>> website {'forth': 'facebook', 'third': 'facebook'}需要提醒的是,這種方法是重新建立一個 dict。
需要提醒注意的是,在字典中的“鍵”,必須是不可變的數據類型;“值”可以是任意數據類型。
>>> dd = {(1,2):1} >>> dd {(1, 2): 1} >>> dd = {[1,2]:1} Traceback (most recent call last):File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'訪問 dict 的值
dict 數據類型是以鍵值對的形式存儲數據的,所以,只要知道鍵,就能得到值。這本質上就是一種映射關系。
映射,就好比“物體”和“影子”的關系,“形影相吊”,兩者之間是映射關系。此外,映射也是一個嚴格數學概念:A 是非空集合,A 到 B 的映射是指:A 中每個元素都對應到 B 中的某個元素。
既然是映射,就可以通過字典的“鍵”找到相應的“值”。
>>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'} >>> person['name'] 'qiwsir' >>> person['language'] 'python'如同前面所講,通過“鍵”能夠增加 dict 中的“值”,通過“鍵”能夠改變 dict 中的“值”,通過“鍵”也能夠訪問 dict 中的“值”。
本節開頭那個城市和區號的關系,也可以用字典來存儲和讀取。
>>> city_code = {"suzhou":"0512", "tangshan":"0315", "beijing":"011", "shanghai":"012"} >>> print city_code["suzhou"] 0512既然 dict 是鍵值對的映射,就不用考慮所謂“排序”問題了,只要通過鍵就能找到值,至于這個鍵值對位置在哪里就不用考慮了。比如,剛才建立的 city_code
>>> city_code {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315'}雖然這里顯示的和剛剛賦值的時候順序有別,但是不影響讀取其中的值。
在 list 中,得到值是用索引的方法。那么在字典中有索引嗎?當然沒有,因為它沒有順序,哪里來的索引呢?所以,在字典中就不要什么索引和切片了。
dict 中的這類以鍵值對的映射方式存儲數據,是一種非常高效的方法,比如要讀取值得時候,如果用列表,Python 需要從頭開始讀,直到找到指定的那個索引值。但是,在 dict 中是通過“鍵”來得到值。要高效得多。正是這個特點,鍵值對這樣的形式可以用來存儲大規模的數據,因為檢索快捷。規模越大越明顯。所以,mongdb 這種非關系型數據庫在大數據方面比較流行了。
基本操作
字典雖然跟列表有很大的區別,但是依然有不少類似的地方。它的基本操作:
- len(d),返回字典(d)中的鍵值對的數量
- d[key],返回字典(d)中的鍵(key)的值
- d[key]=value,將值(value)賦給字典(d)中的鍵(key)
- del d[key],刪除字典(d)的鍵(key)項(將該鍵值對刪除)
- key in d,檢查字典(d)中是否含有鍵為 key 的項
下面依次進行演示。
>>> city_code {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315'} >>> len(city_code) 4以 city_code 為操作對象,len(city_code)的值是 4,表明有四組鍵值對,也可以說是四項。
>>> city_code["nanjing"] = "025" >>> city_code {'suzhou': '0512', 'beijing': '011', 'shanghai': '012', 'tangshan': '0315', 'nanjing': '025'}向其中增加一項
>>> city_code["beijing"] = "010" >>> city_code {'suzhou': '0512', 'beijing': '010', 'shanghai': '012', 'tangshan': '0315', 'nanjing': '025'}突然發現北京的區號寫錯了。可以這樣修改。這進一步說明字典是可變的。
>>> city_code["shanghai"] '012' >>> del city_code["shanghai"]通過 city_code["shanghai"]能夠查看到該鍵(key)所對應的值(value),結果發現也錯了。干脆刪除,用 del,將那一項都刪掉。
>>> city_code["shanghai"] Traceback (most recent call last):File "<stdin>", line 1, in <module> KeyError: 'shanghai' >>> "shanghai" in city_code False因為鍵是"shanghai"的那個鍵值對項已經刪除了,隨意不能找到,用 in 來看看,返回的是 False。
>>> city_code {'suzhou': '0512', 'beijing': '010', 'tangshan': '0315', 'nanjing': '025'}真的刪除了哦。沒有了。
總結
以上是生活随笔為你收集整理的python学习笔记(四)字典(dict)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习笔记(三)tuple(元
- 下一篇: python学习笔记(五)集合(set)