Python--關於dict,Python--dict
本文內容摘錄自慕課網《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,對應的成績稱為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 方法,在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
Ⅰ、for迴圈遍曆:由於dict也是一個集合,所以,遍曆dict和遍曆list類似,都可以通過 for 迴圈實現。
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> 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() 不佔用額外的記憶體。