零基礎學習 Python 之字典

字典的定義

相信你們對字典並不陌生吧,學生時代一塊塊的大小 「磚頭」,還記得怎麼用吧?先從索引查找,無論是拼音仍是偏旁部首,經過索引查到相應的內容,這樣就不須要咱們從頭一頁一頁的找,這種方法能夠很快的找到目標。正是基於這種需求,Python 裏有了一種 dictionary 的對象類型,翻譯過來就是 「字典」,用 dict 表示。python

建立字典

字典裏的元素是一對一對的,有個特別好聽的名字叫:鍵 / 值對,形式是 "key" : "value" ,前面的是鍵,後面是前面的鍵所對應的值,鍵 / 值之間用英文的冒號隔開,每一對鍵 / 值之間用英文的逗號隔開。在字典中,鍵是惟一的,不能重複,而值則是對應於鍵,能夠重複。bash

建立字典的方法有不少,我在這裏挑幾種依次給你們說說。函數

1.建立一個空的字典,而後向裏面加東西,固然也能夠建立一個非空的字典而後在裏面加鍵 / 值對。spa

>>> first_dict = {}
>>> first_dict
{}
>>> second_dict = {'name':'rocky','like':'python'}
>>> second_dict
{'name': 'rocky', 'like': 'python'}
>>> second_dict['where'] = 'China'
>>> second_dict
{'where': 'China', 'name': 'rocky', 'like': 'python'}
複製代碼

在前面的文章裏咱們講過字符串,列表和元組,其中列表是可變的,字符串和元組是不可變的,那麼字典呢?咱們來試驗一下。翻譯

>>> second_dict = {'name':'rocky','like':'python'}
>>> second_dict['name'] = 'leey'
>>> second_dict
{'name': 'leey', 'like': 'python'}
複製代碼

以上代表,字典是能夠修改的,即它是可變的。code

2.能夠利用元組建立字典,請看下面的實例。cdn

>>> tup = (['name','rocky'],['like','python'])
>>> my_dict = dict(tup)
>>> my_dict
{'name': 'rocky', 'like': 'python'}
複製代碼

或者直接用下面的形式也能夠:對象

>>> my_dict = dict(name = 'zhangsan',other = 'lisi')
>>> my_dict
{'other': 'lisi', 'name': 'zhangsan'}
複製代碼

在這裏再提一次,千萬要記得在字典中 「鍵」 必須是是不可變的數據類型, 「值」 能夠是任意的數據類型。因此元組能夠當字典的鍵,可是列表能夠,列表只能作值。排序

訪問字典的值

字典中的 鍵/值 實際上就是一種映射關係,只要知道了 「鍵」,就確定知道 「值」。索引

>>> my_dict = dict(name = 'zhangsan',other = 'lisi')
>>> my_dict['other']
'lisi'
複製代碼

因此字典中的 「鍵」 是多麼的好用,經過它能夠查找值,能夠添加值,能夠改變值。

既然字典是一種映射關係,因此在字典裏也就不須要考慮排序的問題,只要有了 「鍵」 就能夠知道 「值」,那麼鍵 / 值對的位置在哪裏也就不須要考慮了,若是你仔細看過上面的例子,你就會發現添加完的值在字典中的顯示並不按照它的添加順序。又由於沒有了排序,因此在字典中也沒有索引,因此就不存在索引 & 切片。

字典這種鍵 / 值對的方式存儲數據是一種很是高效的方法,查找速度超快,相同的,若是你要在列表中查找一個值,須要從頭開始一個個的找,直到找到了指定的索引值,可是在字典中,直接就能夠經過 「鍵」 找到 「值」,小規模數據的時候這種好處可能不顯,當存儲大規模數據的時候,這種好處是至關明顯的。

字典的基本操做

下面我用一些實例來依次演示字典中的基本操做:

>>> my_dict = {'name':'rocky','like':'python','age':23}
>>> len(my_dict) #返回字典中鍵 / 值對的數量
3
>>> my_dict['age'] #返回字典中的鍵值
23
>>> my_dict['like'] = 'C ++' #改變字典中的鍵值
>>> my_dict
{'age': 23, 'name': 'rocky', 'like': 'C ++'}
>>> del my_dict['like'] #刪除指定的鍵 / 值對
>>> my_dict
{'age': 23, 'name': 'rocky'}
>>> 'like' in my_dict #檢查字典中是否含有指定鍵的項
False
複製代碼

字典的方法

與前面所講述的其它對象類型類似,字典這個對象類型也有一些可以實現對其操做的方法。

1.clear

clear 清除字典中全部的元素,獲得的是空的字典。

>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.clear()
>>> my_dict
{}
>>> del my_dict
>>> my_dict
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'my_dict' is not defined
複製代碼

上面的例子咱們能夠看出 clear 和 del 的區別很大,clear 是將字典清空,獲得空字典,而 delete 是將字典刪除,直接從內存中去掉。

2. get & setdefault

這兩個是跟鍵 / 值對相關的方法,get 方法就是要獲得字典中某個 「鍵」 的 「值」,那麼這就有人要說,不是上面的時候咱們已經講過直接查就行嗎?在這裏的 get 和以前說的還不太同樣,這裏的 get 稍微寬鬆一些,若是想要查的值不存在,get 不會有啥反應,而以前說的方法會報錯。

>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.get('name')
'rocky'
>>> my_dict.get('age')
>>> my_dict['age']
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
KeyError: 'age'
複製代碼

setdefault 也是用來查找字典中某個 「鍵」 的 「值」,若是查找的 「鍵」 存在的話就正常輸出,若是不存在的話,就在字典中加入這個鍵 / 值對。

>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.setdefault('like')
'python'
>>> my_dict.setdefault('age','23')
'23'
>>> my_dict
{'name': 'rocky', 'like': 'python', 'age': '23'}
複製代碼

3.items & keys & values

這是字典的 3 個方法,它們之間有類似之處,很簡單,請看下面的實例:

>>> my_dict = {'name':'rocky','like':'python'}
>>> my_d = my_dict.items()
>>> my_d
dict_items([('name', 'rocky'), ('like', 'python')])
>>> my_k = my_dict.keys()
>>> my_k
dict_keys(['name', 'like'])
>>> my_v = my_dict.values()
>>> my_v
dict_values(['rocky', 'python'])
複製代碼

4.pop & popitem

pop 和 popitem 是字典中的刪除操做。

pop 是以字典的 「鍵」 爲參數,刪除指定的鍵 / 值對,pop 中的參數不能省略且若是刪除字典中沒有的鍵 / 值對,會報錯。

>>> my_dict = {'name':'rocky','like':'python'}
>>> my_dict.pop('name')
'rocky'
>>> my_dict
{'like': 'python'}
>>> my_dict.pop()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: pop expected at least 1 arguments, got 0
>>> my_dict.pop('age')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
KeyError: 'age'
複製代碼

popitem 和 pop 有類似之處,可是 popitem 不用寫參數,可是它刪除的不是最後一個,由於咱們說過字典沒有順序,因此 popitem 是隨機刪除一個,至於刪除誰,徹底看命。

5.update

update 就是更細字典,參數能夠是字典或者某種可迭代的對象,至於什麼是可迭代這裏你能夠先知道這麼個詞,以後咱們會說到,它的返回值是 None,你也能夠理解成沒有返回值。

>>> my_dict = {'name':'rocky','like':'python'}
>>> first = {'age':23}
>>> my_dict.update(first)
>>> my_dict
{'name': 'rocky', 'like': 'python', 'age': 23}
>>> first
{'age': 23}
複製代碼

寫在以後

字典的方法其實還有一個 copy 沒講,就是複製 ( 拷貝 ) 函數,原本像在這裏寫的,可是由於涉及到了淺拷貝和深拷貝,理解起來比較麻煩,再加上今天的內容已經夠多了,因此我準備明天的文章專門寫一下拷貝相關的內容。

更多內容,歡迎關注公衆號「Python空間」,期待和你的交流。

在這裏插入圖片描述
相關文章
相關標籤/搜索