零基礎學習 Python 之字典

2021-09-11 17:40:35 字數 4664 閱讀 3578

相信大家對字典並不陌生吧,學生時代一塊塊的大小 「磚頭」,還記得怎麼用吧?先從索引查詢,不管是拼音還是偏旁部首,通過索引查到相應的內容,這樣就不需要我們從頭一頁一頁的找,這種方法可以很快的找到目標。正是基於這種需求,python 裡有了一種 dictionary 的物件型別,翻譯過來就是 「字典」,用 dict 表示。

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

建立字典的方法有很多,我在這裡挑幾種依次給大家說說。

1.建立乙個空的字典,然後向裡面加東西,當然也可以建立乙個非空的字典然後在裡面加鍵 / 值對。

>>> first_dict = {}

>>> first_dict

{}>>> second_dict =

>>> second_dict

>>> second_dict['where'] = 'china'

>>> second_dict

複製**

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

>>> second_dict = 

>>> second_dict['name'] = 'leey'

>>> second_dict

複製**

以上表明,字典是可以修改的,即它是可變的。

2.可以利用元組建立字典,請看下面的例項。

>>> tup = (['name','rocky'],['like','python'])

>>> my_dict = dict(tup)

>>> my_dict

複製**

或者直接用下面的形式也可以:

>>> my_dict = dict(name = 'zhangsan',other = 'lisi')

>>> my_dict

複製**

在這裡再提一次,千萬要記得在字典中 「鍵」 必須是是不可變的資料型別, 「值」 可以是任意的資料型別。所以元組可以當字典的鍵,但是列表可以,列表只能做值。

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

>>> my_dict = dict(name = 'zhangsan',other = 'lisi')

>>> my_dict['other']

'lisi'

複製**

所以字典中的 「鍵」 是多麼的好用,通過它可以查詢值,可以新增值,可以改變值。

既然字典是一種對映關係,所以在字典裡也就不需要考慮排序的問題,只要有了 「鍵」 就可以知道 「值」,那麼鍵 / 值對的位置在**也就不需要考慮了,如果你仔細看過上面的例子,你就會發現新增完的值在字典中的顯示並不按照它的新增順序。又因為沒有了排序,所以在字典中也沒有索引,所以就不存在索引 & 切片。

字典這種鍵 / 值對的方式儲存資料是一種非常高效的方法,查詢速度超快,相同的,如果你要在列表中查詢乙個值,需要從頭開始乙個個的找,直到找到了指定的索引值,但是在字典中,直接就可以通過 「鍵」 找到 「值」,小規模資料的時候這種好處可能不顯,當儲存大規模資料的時候,這種好處是相當明顯的。

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

>>> my_dict = 

>>> len(my_dict) #返回字典中鍵 / 值對的數量

3>>> my_dict['age'] #返回字典中的鍵值

23>>> my_dict['like'] = 'c ++'

#改變字典中的鍵值

>>> my_dict

>>> del my_dict['like'] #刪除指定的鍵 / 值對

>>> my_dict

>>> 'like'

in my_dict #檢查字典中是否含有指定鍵的項

false

複製**

與前面所講述的其它物件型別相似,字典這個物件型別也有一些能夠實現對其操作的方法。

1.clear

clear 清除字典中所有的元素,得到的是空的字典。

>>> my_dict = 

>>> my_dict.clear()

>>> my_dict

{}>>> del my_dict

>>> my_dict

traceback (most recent call last):

file "", line 1, in

nameerror: name 'my_dict' is not defined

複製**

上面的例子我們可以看出 clear 和 del 的區別很大,clear 是將字典清空,得到空字典,而 delete 是將字典刪除,直接從記憶體中去掉。

2. get & setdefault

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

>>> my_dict = 

>>> my_dict.get('name')

'rocky'

>>> my_dict.get('age')

>>> my_dict['age']

traceback (most recent call last):

file "", line 1, in

keyerror: 'age'

複製**

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

>>> my_dict = 

>>> my_dict.setdefault('like')

'python'

>>> my_dict.setdefault('age','23')

'23'

>>> my_dict

複製**

3.items & keys & values

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

>>> my_dict = 

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

>>> my_dict.pop('name')

'rocky'

>>> my_dict

>>> my_dict.pop()

traceback (most recent call last):

file "", line 1, in

typeerror: pop expected at least 1 arguments, got 0

>>> my_dict.pop('age')

traceback (most recent call last):

file "", line 1, in

keyerror: 'age'

複製**

popitem 和 pop 有相似之處,但是 popitem 不用寫引數,但是它刪除的不是最後乙個,因為我們說過字典沒有順序,所以 popitem 是隨機刪除乙個,至於刪除誰,完全看命。

5.update

update 就是更細字典,引數可以是字典或者某種可迭代的物件,至於什麼是可迭代這裡你可以先知道這麼個詞,之後我們會說到,它的返回值是 none,你也可以理解成沒有返回值。

>>> my_dict = 

>>> first =

>>> my_dict.update(first)

>>> my_dict

>>> first

複製**

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

Python零基礎之元組,字典,集合

tup print type tup tup 1 print type tup tup1 0,print type tup1 tup 1,2,3,4,5print type tup a,b,c,d,e tup print a,b,c,d,e tup 1,2,3,4,5a,b,c tup d,e,f ...

零基礎學習 Python 之元組

元組和我們之前講過的數字,字串和列表一樣,也是 python 中的一種物件型別,它和列表比較想象,所以一般會被忽略掉,但是由於其特殊性,在實際應用的時候又很容易犯錯。首先我們來看乙個例子 a abc a abc b def 123,1,2,3 b def 123,1,2,3 type a str t...

零基礎學習 Python 之閉包

在正式講 閉包 之前我們首先得先知道 巢狀函式 這麼乙個東西,我在之前的文章中 零基礎學習 python 之函式物件 說過,函式不單單可以作為物件來傳遞,還可以在乙個函式裡面巢狀乙個函式,這個就是我們今天要講的巢狀函式。首先我們來看乙個例子 def my name def your name pri...