天天看點

關于dict

1、dict 特性

dict用花括号{}表示,然後按照 key: value, 寫出來即可。最後一個 key: value 的逗号可以省略。

①、dict 的查找速度快,無論dict有10個元素還是10萬個元素,查找速度都一樣。而list的查找速度随着元素增加而逐漸下降。

       dict的缺點是占用記憶體大,還會浪費很多内容,list正好相反,占用記憶體小,但是查找速度慢

②、dict 通過key 來查找 value ,是以key 不能重複,而value可重複

③、dict儲存的"key:value"是無序的,即不可用索引号切片等。

Python的基本類型如字元串、整數、浮點數都是不可變的,都可以作為 key。但是list是可變的,就不能作為 key。

用 dict 表示“名字”-“成績”的查找表如下:

 d = {      
 'Adam': 95, #key : value      
 'Lisa': 85,      
 'Bart': 59      
 }      

我們把名字稱為key,對應的成績稱為value,dict就是通過 key 來查找 value。

2、通路 dict

建立一個dict,用于表示名字和成績的對應關系:

 d = {      
 'Adam': 95,      
 'Lisa': 85,      
 'Bart': 59      
 }      

使用 d[key] 的形式來查找對應的 value,這和 list 很像,不同之處是,list 必須使用索引傳回對應的元素,而dict使用key:

 23:30:12      

注意: 通過 key 通路 dict 的value,隻要 key 存在,dict就傳回對應的value。如果key不存在,會直接報錯:KeyError。

要避免 KeyError 發生,有兩個辦法:

一是先判斷一下 key 是否存在,用 in 操作符:

 if 'Paul' in d:      
 print d['Paul']      

如果 'Paul' 不存在,if語句判斷為False,自然不會執行 print d['Paul'] ,進而避免了錯誤。

二是使用dict本身提供的一個 get 方法 dict.get(key, default=None),在Key不存在的時候,傳回預設值None:

 >>> print d.get('Bart')      
 59      
 >>> print d.get('Paul')      
 None      
 3、更新 dict      
dict是可變的,可以随時往dict中添加新的 key-value。比如已有dict:      
 d = {      
 'Adam': 95,      
 'Lisa': 85,      
 'Bart': 59      
 }      
要把新同學'Paul'的成績 72 加進去,用指派語句:      
 >>> d['Paul'] = 72      
再看看dict的内容:      
 >>> print d      
 {'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 59}      
如果 key 已經存在,則指派會用新的 value 替換掉原來的 value:      
 >>> d['Bart'] = 60      
>>> print d

 {'Lisa': 85, 'Paul': 72, 'Adam': 95, 'Bart': 60}      
4、删除dict元素或清空dict
  可使用pop方法 dict.pop(key[,default]),通過key值删除dict内元素,并傳回被删除key對應的value。若key不存在,且default值未設定,則傳回KeyError異常
      
>>> a
{1: 'abc', 2: 'efg', 3: 'hij'}>>> a.pop(1)'abc'>>> a
{2: 'efg', 3: 'hij'}>>> 
>>> a
{2: 'efg', 3: 'hij'}>>> a.pop(1,False)
False>>>      
  可使用clear方法dict.clear()清空dict

5、周遊/疊代 dict       
 Ⅰ、for循環周遊:由于dict也是一個集合,是以,周遊dict和周遊list類似,都可以通過 for 循環實作。      
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }4
>>> for key in d:
 print key,'-',d[key]      
Lisa - 85
Adam - 95
Bart - 59      
Ⅱ、values() / itervalues() 方法:傳回dict 的value值      
 values()方法:把 dict 轉換成了包含 value 的list      
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.values()
[85, 95, 59]
>>> for v in d.values():
 print v      
85
95
59      
 用 itervalues() 方法替代 values() 方法,疊代效果完全一樣。而 itervalues() 方法不會轉換,它會在疊代過程中依次從 dict 中取出 value,是以 itervalues() 方法比 values() 方法節省了生成 list 所需的記憶體。      
 Ⅲ、items() / iteritems() 方法:傳回dict 的key和value      
dict 對象的 items() 方法傳回的值:      
 >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)]      
可以看到,items() 方法把dict對象轉換成了包含tuple的list,對這個list進行疊代,可以同時獲得key和value:      
 >>> for key, value in d.items(): ... print key, ':', value ... Lisa : 85 Adam : 95 Bart : 59      
和 values() 有一個 itervalues() 類似, items() 也有一個對應的 iteritems(),iteritems() 不把dict轉換成list,而是在疊代過程中不斷給出 tuple,是以, iteritems() 不占用額外的記憶體。