Python--關於dict

Pyerlife發表於2016-06-29

慕課網《Python 入門》學習筆記

 

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,對應的成績稱為valuedict就是通過 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() 不佔用額外的記憶體。

相關文章