Python基礎(chǔ)05-字典(dict)

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 增

  1. dic[key] = value
    當(dāng)key在原字典中不存在時, 即為新增操作

3.2 刪

  1. del dic[key]熏矿,del d["age1"]

  2. dic.pop(key[, default])
    刪除指定的鍵值對, 并返回對應(yīng)的值
    如果key, 不存在, 那么直接返回給定的default值;
    不作刪除動作
    如果沒有給定默認(rèn)值, 則報錯

  3. dic.popitem()
    刪除按升序排序后的第一個鍵值對, 并以元組的形式返回該鍵值對
    如果字典為空, 則報錯

  4. dic.clear()
    刪除字典內(nèi)所有鍵值對
    返回None
    注意, 字典對象本身還存在, 只不過內(nèi)容被清空
    注意 和 del 的區(qū)別

3.3 改

  1. 只能改值, 不能改key

  2. 修改單個鍵值對
    dic[key] = value已骇,直接設(shè)置, 如果key不存在, 則新增, 存在則修改

  3. 批量修改鍵值對
    oldDic.update(newDic)
    根據(jù)新的字典, 批量更新舊字典中的鍵值對
    如果舊字典沒有對應(yīng)的key, 則新增鍵值對

3.4 查

3.4.1 獲取單個值

  1. dic[key],如果key, 不存在, 會報錯

  2. dic.get(key[, default]),
    如果不存在對應(yīng)的key, 則取給定的默認(rèn)值default
    如果沒有默認(rèn)值, 則為None票编,但不會報錯
    但是, 原字典不會新增這個鍵值對

  3. 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 注意

  1. python2.x 和 python3.x 版本之間關(guān)于獲取鍵鲤竹,獲取值,獲取鍵值對 item昔榴,之間的區(qū)別
  • python2 直接是一個列表辛藻,可以通過下標(biāo)獲取指定元素
  • python3 中是 Dictionary view objects 對象

3.4.6 Dictionary view objects 對象

即,前面獲取的 獲取鍵互订,獲取值吱肌,獲取鍵值對 等方法的返回值

  1. 該類型對象會因為對應(yīng)字典 dict 的改變而發(fā)生改變(跟著改變)
  2. Dictionary view objects 對象不能通過下標(biāo)來獲取元素,只能通過方法 list() 或 tuple() 方法轉(zhuǎn)成對應(yīng)的列表或者元組進行操作
  3. 在 python2 中提供了如下方法
viewkeys()
viewvalues()
viewitems()
  1. 作用如同 python3 中的 Dictionary view objects 對象

3.4 遍歷

  1. for in仰禽,遍歷所有的 keys 或 values
  2. for k, v in dic.items()氮墨,遍歷所有的 items

3.5 計算

  1. len(dict),鍵值對的個數(shù)

3.6 判定

  1. key in dic吐葵,判定dic中的key, 是否存在x
  2. key not in dic规揪,判定dic中的key, 是否不存在x
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市温峭,隨后出現(xiàn)的幾起案子猛铅,更是在濱河造成了極大的恐慌,老刑警劉巖凤藏,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奸忽,死亡現(xiàn)場離奇詭異堕伪,居然都是意外死亡,警方通過查閱死者的電腦和手機月杉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門刃跛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苛萎,你說我怎么就攤上這事桨昙。” “怎么了腌歉?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵蛙酪,是天一觀的道長。 經(jīng)常有香客問我翘盖,道長桂塞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任馍驯,我火速辦了婚禮阁危,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汰瘫。我一直安慰自己狂打,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布混弥。 她就那樣靜靜地躺著趴乡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝗拿。 梳的紋絲不亂的頭發(fā)上晾捏,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音哀托,去河邊找鬼惦辛。 笑死,一個胖子當(dāng)著我的面吹牛仓手,可吹牛的內(nèi)容都是我干的胖齐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼俗或,長吁一口氣:“原來是場噩夢啊……” “哼市怎!你這毒婦竟也來了岁忘?” 一聲冷哼從身側(cè)響起辛慰,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎干像,沒想到半個月后帅腌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驰弄,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年速客,在試婚紗的時候發(fā)現(xiàn)自己被綠了戚篙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡溺职,死狀恐怖岔擂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浪耘,我是刑警寧澤乱灵,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站七冲,受9級特大地震影響痛倚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澜躺,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一蝉稳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掘鄙,春花似錦耘戚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颅夺,卻和暖如春朋截,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吧黄。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工部服, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拗慨。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓廓八,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赵抢。 傳聞我的和親對象是個殘疾皇子剧蹂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容