python3 第十四章,python3

來源:互聯網
上載者:User

python3 第十四章,python3

在python中字典是另一種可變容器模型,且可儲存任意類型對象。

字典的每個索引值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括弧({})中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }
  • 鍵必須是唯一的,但值則不必。
  • 值可以取任何資料類型,但鍵必須是不可變的,如字串,數字或元組。

 

Python內建了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的尋找速度。

舉個例子,假設要根據同學的名字尋找對應的成績,如果用list實現,需要兩個list:

names = ['Michael', 'Bob', 'Tracy']scores = [95, 75, 85]

給定一個名字,要尋找對應的成績,就先要在names中找到對應的位置,再從scores取出對應的成績,list越長,耗時越長。

如果用dict實現,只需要一個“名字”-“成績”的對照表,直接根據名字尋找成績,無論這個表有多大,尋找速度都不會變慢。用Python寫一個dict如下:

d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}print('Michael的成是:', d['Michael'])

以上代碼,輸出:

Michael的成是: 95

為什麼dict尋找速度這麼快?因為dict的實現原理和查字典是一樣的。假設字典包含了1萬個漢字,我們要查某一個字,一個辦法是把字典從第一頁往後翻,直到找到我們想要的字為止,這種方法就是在list中尋找元素的方法,list越大,尋找越慢。第二種方法是先在字典的索引表裡(比如部首表)查這個字對應的頁碼,然後直接翻到該頁,找到這個字。無論找哪個字,這種尋找速度都非常快,不會隨著字典大小的增加而變慢。dict就是第二種實現方式。

 

1、訪問字典裡的值

把相應的鍵放入熟悉的方括弧,如下執行個體:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}print("dict['Name']: ", dict['Name'])print("dict['Age']: ", dict['Age'])

以上代碼,輸出:

dict['Name']:  roydict['Age']:  1

 

如果key不存在,dict就會報錯:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}print("dict['sex']: ", dict['sex'])

以上代碼,輸出:

Traceback (most recent call last):  File "D:/python/teaching/01.py", line 2, in <module>    print("dict['sex']: ", dict['sex'])KeyError: 'sex'

要避免key不存在的錯誤,有兩種辦法,一是通過in判斷key是否存在:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}if 'sex' in dict:    print("dict['sex']: ", dict['sex'])else:    print('沒有找到key=sex的元素')

以上代碼,輸出:

沒有找到key=sex的元素

二是通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}if dict.get('sex'):    print("dict['sex']: ", dict['sex'])else:    print(dict.get('sex','沒有找到key=sex的元素'))  # 自己指了一個value

以上代碼,輸出:

沒有找到key=sex的元素

注意:返回None的時候Python的互動環境不顯示結果。

 

2、修改字典

向字典添加新內容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對如下執行個體:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}dict['Age'] = 100  # 更新 Agedict['sex'] = '男'  # 添加 sexprint('dict[\'Age\'] :', dict['Age'])print('dict[\'sex\'] :', dict['sex'])

以上代碼,輸出:

dict['Age'] : 100dict['sex'] : 男

 

3、刪除字典元素

能刪單一的元素也能清空字典,清空只需一項操作。

顯示刪除一個字典用del命令,如下執行個體:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}dict['Age'] = 100  # 更新 Agedict['sex'] = '男'  # 添加 sexdel dict['Age']  # 刪除鍵 'sex' print('dict :', dict)

以上代碼,輸出:

dict : {'Name': 'roy', 'Class': 'First', 'sex': '男'}

 

也可以用clear()清空字典:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}dict.clear()  # 清空字典print('dict :', dict)

以上代碼,輸出:

dict : {}

 

也可以刪除整個字典:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}del dict # 刪除字典print('dict :', dict)

以上代碼,輸出:

dict : <class 'dict'>

執行 del 操作後字典不再存在了

 

要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除:

dict = {'Name': 'roy', 'Age': 1, 'Class': 'First'}dict.pop('Name')  # 刪除鍵 'Name'print('dict :', dict)

以上代碼,輸出:

dict : {'Age': 1, 'Class': 'First'}

 

注意,dict內部存放的順序和key放入的順序是沒有關係的。

和list比較,dict有以下幾個特點:

而list相反:

所以,dict是用空間來換取時間的一種方法。

dict可以用在需要高速尋找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象

這是因為dict根據key來計算value的儲存位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的演算法稱為雜湊演算法(Hash)。

要保證hash的正確性,作為key的對象就不能變。在Python中,字串、整數等都是不可變的,因此,可以放心地作為key。而list是可變的,就不能作為key

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.