python課程第三周 內建資料結構——字典

來源:互聯網
上載者:User

標籤:python 字典 dict

字典,Python中的無序集合,key-value結構,通過鍵來訪問對應的值,而不是依靠位移或者索引來訪問值。下面是字典的一些基本屬性:

  • 字典的value可以是任意值,例如數字、字串、列表、元組,甚至是字典本身

  • 字典的key必須是可hash的值

  • 字典的key是唯一的

  • 字典沒有切片操作,只能通過key來訪問value

  • 字典內的元素都是無序儲存的

  • 可變長度、異構、任意嵌套

  • 對象參考資料表:採用最佳化的散列演算法來尋找鍵,因此鍵搜尋速度非常快,字典儲存的是對象引用(而不是拷貝)。


字典的初始化:

d=dict() #空字典d={}#空字典d={‘a‘:‘b‘}#單個索引值對的字典d = dict.fromkeys([‘a‘, ‘b‘]) #會建立一個{‘a‘:None, ‘b‘:None}字典d = dict(zip(keylist, valuelist)) #多個索引值對的字典,keylist和valuelist必須是可迭代對象

字典的下標操作

d= {‘a‘:1,‘b‘:2}>>>d[‘a‘]1>>>d[‘a‘]=123 #修改value=123>>>d{‘a‘:123, ‘b‘:2}>>> d[‘c‘] = 345#key不存在時,會自動建立一個key-value索引值對>>> d{‘c‘: 345, ‘b‘: 2, ‘a‘: 123}
>>> d[‘d‘]#當訪問不存在的key時,會返回一個KeyError錯誤Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: ‘d‘


字典常用方法:

update() #可接受一個字典、一個二元組構成的可迭代對象、或關鍵字參數作為函數參數,然後把參數添加到調用方法的字典裡面去。

通過key直接增加對應的索引值對

setdefault(k,[d])  #給字典增加一個元素,如果k存在時,返回對應的值v,不存在時,增加k-d索引值對並返回d。

樣本如下:

通過update方法:

>>>d={‘a‘:1,‘b‘:2}>>>d.update(c=3)  #給d增加一個索引值對‘c‘:3>>>d{‘c‘: 3, ‘b‘: 2, ‘a‘: 1}>>>d.update([(‘f‘,4),(‘g‘,5)]) #給d增加兩個索引值對,使用二元組構成的可迭代對象做參數的方式。>>> d{‘c‘: 3, ‘b‘: 2, ‘f‘: 4, ‘a‘: 1, ‘g‘: 5}>>>d.update({‘e‘:5})   #給d增加一個索引值對,使用字典做參數的方式>>> d{‘c‘: 3, ‘b‘: 2, ‘a‘: 1, ‘e‘: 5, ‘g‘: 5, ‘f‘: 4}


通過key來添加值

>>>d = {‘a‘:1, ‘b‘:2}>>>d[‘c‘] = 3 #此時d就是{‘a‘:1, ‘b‘:2, ‘c‘:3}


通過setdefault函數

>>>d = {‘a‘:1, ‘b‘:2}>>>d.setdefault(‘a‘, 2)# 返回‘a‘對應的值11>>> d.setdefault(‘h‘,10)#在d中增加索引值對 ‘h‘:10,並傳回值1010>>> d{‘c‘: 3, ‘b‘: 2, ‘a‘: 1, ‘e‘: 5, ‘g‘: 5, ‘h‘: 10, ‘f‘: 4}


pop(k,[d])  #根據給出的k,在字典中刪除k,然後返回k對應的v,如果k不存在,返回給出的預設值d,如果沒有給出預設值,返回KeyError

popitem()  #在字典中隨機取一個索引值對,然後作為一個元組返回,如果字典是空的,則返回一個KeyError

clear()   #刪除字典裡面的全部元素

del(d[key]) #del方法刪除根據鍵刪除對應的值,如果key不存在,則會報KeyError錯誤。

樣本:

>>> d{‘e‘: 234, ‘i‘: 555, ‘f‘: 3, ‘g‘: 333, ‘c‘: 3, ‘a‘: 123, ‘b‘: 2}   #d原來的值>>> d.pop(‘e‘)    #刪除‘e‘:234索引值對,並返回234234>>> d.pop(‘j‘)   #刪除不存在的鍵‘j‘,返回KeyError錯誤Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: ‘j‘>>> d.pop(‘j‘,-1)   #刪除不存在的鍵‘j‘,給出預設值-1,返回預設值-1>>> d.popitem()     #返回索引值對(‘i‘, 555)>>>del(d[‘e‘]#不存在的索引值對,報錯。Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: ‘e‘>>>del(d[‘a‘])#刪除‘a‘對應的值。>>>d{‘b‘: 2, ‘f‘: 3, ‘i‘: 555, ‘g‘: 333}

直接通過key來修改對應的值

update()  #根據給出的鍵來修改對應的值,鍵不存在則新增索引值對

樣本如下:

>>>d = {‘a‘:1, ‘b‘:2}>>>d[‘a‘] = 3>>>d{‘b‘:2, ‘a‘:3}>>>d.update(a=2)>>>d{‘b‘:2‘, ‘a‘:2}


通過key來訪問對應的值

get(k,[d]) #通過k來訪問對應值,對應值存在則返回對應值,不存在則返回預設值d,沒有給出預設值則返回空。使用get方法來尋找對應的值,可以有效避免值不存在時拋出KeyError錯誤。

樣本如下:

>>>d={‘a‘:1, ‘b‘:2}>>>d[‘a‘]1>>> d.get(‘b‘,3)2>>> d.get(‘c‘,3)3>>> d.get(‘c‘)

字典也是序列的一種,因此也可以應用序列的一些常用的方法,例如len(d)是字典內索引值對的數量。


字典的遍曆

keys()   #返回一個dict_keys可迭代對象,包含所有的key,因此可以通過這個方法來遍曆字典

values()   #返回一個dict_values可迭代對象,包含所有的value

items()    #返回一個dict_items(key-value索引值對)可迭代對象,通過for迴圈或其他迭代工具可以取出索引值對組成的元組

fromkeys(iterable,value=None)  #用於給字典初始化,以iterable裡的對象作為key,預設的value是None

樣本如下:

>>>d = {‘a‘:1, ‘b‘:2}>>> d{‘b‘: 2, ‘a‘: 1}>>> for key in d.keys(): #通過鍵來遍曆字典...     print(key, ‘=>‘, d[key])...b => 2a => 1

在python2中,使用上面的方法遍曆字典返回的是一個鍵列表、值列表或索引值對列表,但在python3中,返回的是可迭代對象。減少了記憶體佔用。


鍵的排序

使用list轉換返回的可迭代對象,然後使用sorted方法排序,在使用for迴圈依次讀取索引值對。樣本如下:

>>> for key in sorted(list(d.keys())):...     print(key, ‘=>‘, d[key])...a => 1b => 2

本節主要介紹了Python的內建類型之一的字典,字典作為一種無序集合,通過索引值對的形式進行資料存放區,搜尋的速度較快,同時還支援任意嵌套,根據需要增長和縮短,非常具有靈活性,因此在Python的開發過程中應用非常廣泛。因此,對字典的基本方法要反覆練習,要求熟練掌握。


本文出自 “無飛天下” 部落格,請務必保留此出處http://hf1208.blog.51cto.com/8957433/1882311

python課程第三周 內建資料結構——字典

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.