轉載請注明出處
Python字典(dict)是一個很常用的復合類型,其它常用符合類型有:數組(array)、元組(touple)和集合(set)。字典是一個key/value的集合,key可以是任意可被哈希(內部key被hash后作為索引)的類型。因此,key可以是文本、數字等任意類型。如果兩個數字'=='判斷相等,那么key就相等,value會產生覆蓋(例如:1 == 1.0 # => True)。注意,浮點數比較很不精確,因此千萬不要用浮點數作為key!
字典是Python的內置類型,有字面量的表示方法——逗號分割的'key: value'元組:
{'one': 1, 'two':2, 'three':3}
當然,還可以用dict函數來生成返回字典(摘自官方文檔的一個例子):
>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True
dict函數可接收的參數形式相當豐富。第一行用關鍵字參數來生成字典,很容易理解。第三行與第四行其實是相同的方式,zip函數將兩個數組參數兩兩合並成為一個二元組數組,所以,還可以傳入二元組數組作為參數。直接傳入一個字面量的字典表示法也可以。當然,這幾種形式后面還可以繼續加關鍵字參數:
>>> d = dict([('two', 2), ('one', 1), ('three', 3)], four=4, five=5)
>>> e = dict({'three': 3, 'one': 1, 'two': 2}, four=4, five=5)
后面的關鍵字參數key如果在前面出現過,那么將會覆蓋前面的值。
字典的常見操作
'd'表示一個字典實例,'dict'表示字典類
len(d) 返回字典中有多少項
d[key] 返回索引為'key'的值,不存在拋出KeyError
d[key] = value 設置'key'項的值為'value'
del d[key] 刪除索引為'key'的項,不存在拋出KeyError
key in d 返回'key'是否在字典內
key not in d
高級操作
d.clear() 清除所有項
d.copy() 返回一個克隆的字典
iter(d) 返回一個iterable對象,迭代字典的key。相當於d.iterkeys()
>>> d = dict(one=1, two=2, three=3)
>>> it = iter(d)
>>> it.next() # => "three" # 字典插入是無順序的
>>> it.next() # => "two"
>>> it.next() # => "one"
>>> it.next() # => StopIteration
dict.fromkeys(seq[,value]) 通過一個序列對象(列表、字典、集合的keys等)創建字典,value為每個項的默認值
d.get(key,[default]) 獲取key對應的值,不存在則返回default值。與d[key]的區別是前者不拋出KeyError,而是返回default值
d.keys() 將所有keys作為一個列表返回,相當與list(d)
d.values()
d.items() 返回一個(key, value)的元組列表
d.iterkeys() 返回一個可key的迭代對象
d.itervalues
d.iteritems
d.pop(key[,default]) 刪除指定的項並返回值,如果不存在則返回default。若default未設置則在key不存在的情況下拋出KeyError
d.popitem() 刪除隨機的一個項,並返回(key, value)
d.setdefault(key[,default]) 與d.pop很相似,不過,在沒有指定key的情況下該函數會插入這個項並返回
d.update([other]) 與用dict創建字典所接受的參數類型相同,創建或者更新項
d.viewkeys() 返回view對象,字典改變,view對象也會改變
d.viewvalues()
d.viewitems()
View對象
v不能進行更新和索引,需先轉換為其他序列類型。
len(v)
iter(v)
x in v
v & other 交集,other可以是任何序列對象
v | other 並集
v - other 補集
v ^ other 非交集