1 概念
- 無序的拱雏,可變的,鍵值對集合
2 定義
2.1 方式1:{key:value, key:value, ...}
2.2 方式2:dict.fromkeys(“abc”, 555)
- 靜態(tài)方法
formkeys(seq, value) # seq 序列集合
類和對象都可以調(diào)用
- 類方法
dict.fromkeys(“abc”, 555) # dict 是指字典類型
>>>>
{“a” : 555, “b” : 555, “c” : 555}
- 對象方法
d.fromkeys(“abc”, 555) # d是指實例化的字典對象
>>>>
{“a” : 555, “b” : 555, “c” : 555}
2.3 注意
2.3.1 key不能重復(fù)
- 如果重復(fù)躺酒,后值會把前值置換
- key 必須是任意不可變類型
可變
* 列表
* 字典
* 可變集合
* ...
不可變
* 數(shù)值
* 布爾
* 字符串
* 元組
* ...
2.3.2 原因:python字典管削,采用哈希(hash)的方式
python字典丈冬,采用哈希(hash)的方式
1. 簡單存儲過程
1.1 初始化一個表格硝烂,用來存放所有的值
* 這個表稱之為哈希表(暫且可理解為列表)
1.2 在存儲一個鍵值對的時候,會做如下操作
* 根據(jù)給定的 key,通過某些機制闹伪,得到一個在哈希表中的索引位置
* 把 key 通過哈希函數(shù)轉(zhuǎn)換成一個整型數(shù)字,即哈希值
* 將該數(shù)字對數(shù)組長度進行取余壮池,取余結(jié)果就當(dāng)做數(shù)組的下標(biāo)
* 如果產(chǎn)生了哈希沖突
* 比如偏瓤,兩個不同的 key,計算出來的索引是同一個椰憋,
* 則采用“開發(fā)尋址法”(通過探測函數(shù)查找下一個空位)
1.3 根據(jù)索引位置厅克,存儲給定的值
2 簡單查找過程
* 再次使用哈希函數(shù)將 key 轉(zhuǎn)換為對應(yīng)列表的索引,并定位到列表的位置獲取值
3. 常用操作
3.1 增
-
dic[key] = value
當(dāng)key在原字典中不存在時, 即為新增操作
3.2 刪
del dic[key]
熏矿,del d["age1"]dic.pop(key[, default])
刪除指定的鍵值對, 并返回對應(yīng)的值
如果key, 不存在, 那么直接返回給定的default值;
不作刪除動作
如果沒有給定默認(rèn)值, 則報錯dic.popitem()
刪除按升序排序后的第一個鍵值對, 并以元組的形式返回該鍵值對
如果字典為空, 則報錯dic.clear()
刪除字典內(nèi)所有鍵值對
返回None
注意, 字典對象本身還存在, 只不過內(nèi)容被清空
注意 和 del 的區(qū)別
3.3 改
只能改值, 不能改key
修改單個鍵值對
dic[key] = value
已骇,直接設(shè)置, 如果key不存在, 則新增, 存在則修改批量修改鍵值對
oldDic.update(newDic)
根據(jù)新的字典, 批量更新舊字典中的鍵值對
如果舊字典沒有對應(yīng)的key, 則新增鍵值對
3.4 查
3.4.1 獲取單個值
dic[key]
,如果key, 不存在, 會報錯dic.get(key[, default])
,
如果不存在對應(yīng)的key, 則取給定的默認(rèn)值default
如果沒有默認(rèn)值, 則為None票编,但不會報錯
但是, 原字典不會新增這個鍵值對dic.setdefault(key[, default])
獲取指定key對應(yīng)的值
如果key不存在, 則設(shè)置給定默認(rèn)值, 并返回該值
如果默認(rèn)值沒給定
則使用None代替
3.4.2 獲取所有值
dic.values()
褪储,打印類型結(jié)果是 dict_values()
3.4.3 獲取所有鍵
dic.keys()
,打印類型結(jié)果是 dict_keys()
3.4.4 獲取字典的鍵值對
dic.items()
慧域,打印類型結(jié)果是 dict_items()
3.4.5 注意
- python2.x 和 python3.x 版本之間關(guān)于獲取鍵鲤竹,獲取值,獲取鍵值對 item昔榴,之間的區(qū)別
- python2 直接是一個列表辛藻,可以通過下標(biāo)獲取指定元素
- python3 中是 Dictionary view objects 對象
3.4.6 Dictionary view objects 對象
即,前面獲取的 獲取鍵互订,獲取值吱肌,獲取鍵值對 等方法的返回值
- 該類型對象會因為對應(yīng)字典 dict 的改變而發(fā)生改變(跟著改變)
- Dictionary view objects 對象不能通過下標(biāo)來獲取元素,只能通過方法 list() 或 tuple() 方法轉(zhuǎn)成對應(yīng)的列表或者元組進行操作
- 在 python2 中提供了如下方法
viewkeys()
viewvalues()
viewitems()
- 作用如同 python3 中的 Dictionary view objects 對象
3.4 遍歷
-
for in
仰禽,遍歷所有的 keys 或 values -
for k, v in dic.items()
氮墨,遍歷所有的 items
3.5 計算
-
len(dict)
,鍵值對的個數(shù)
3.6 判定
-
key in dic
吐葵,判定dic中的key, 是否存在x -
key not in dic
规揪,判定dic中的key, 是否不存在x