【Python】07. dict 和 set

使用 dict 和 set


dict

Python內(nèi)置支持刀脏,全稱 dictionary淳玩,在其它語(yǔ)言中也被稱為 map谆奥, 使用鍵-值(key-value)存儲(chǔ)见坑,例如根據(jù)名字找到相關(guān)的成績(jī):

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
        >>> d['Michael']
        95

當(dāng)然上述的也可以使用兩個(gè) list粹污,一個(gè)存名字段多,一個(gè)存成績(jī),然后通過(guò)相同的索引去查找壮吩,但是數(shù)據(jù)量越大越慢进苍,相當(dāng)于一本詞典從頭翻到尾只為找一個(gè)字。而反觀 dict粥航,它是通過(guò) key 計(jì)算出 value 的內(nèi)存地址來(lái)進(jìn)行查找(哈希算法)琅捏,相當(dāng)于通過(guò)部首或拼音找字。

特點(diǎn):

1. 查找速度快递雀,且不隨數(shù)據(jù)量增多而變慢柄延,但是占用大量的內(nèi)存(使用空間換取時(shí)間)
  (list就是數(shù)據(jù)越多越慢缀程,但是占用空間兴寻伞)
  2. 一個(gè) key 只能對(duì)應(yīng)一個(gè) value,key 如果不存在則會(huì)報(bào)錯(cuò)
  3. dict 內(nèi)部存放的順序和 key 放入的順序是沒(méi)有任何關(guān)聯(lián)的
  4. key 值必須是不可變對(duì)象

如何判斷 key 值不存在杨凑?

法一
    使用 IN 判斷滤奈,eg: 'Thomas' in d 看結(jié)果是否為 False
  法二
    使用 dict 提供的 get 方法,如果不存在可以返回 None(python 的交互命令行不會(huì)有任何顯示)撩满,或者自己指定的 value蜒程。 eg:
        >>> d.get('Thomas')     
        >>> d.get('Thomas', -1)     
        -1

刪除 key

要?jiǎng)h除一個(gè) key,用 pop(key)方法伺帘,其對(duì)應(yīng)的 value 也會(huì)從 dict 中刪除:
        >>> d.pop('Bob')
        75
        >>> d
        {'Michael': 95, 'Tracy': 85}


set

set 和 dict 類似昭躺,也是一組 key 的集合,只是不存儲(chǔ) value伪嫁。要?jiǎng)?chuàng)建一個(gè) set 需要提供一個(gè) list 作為輸入集合:
        >>> s = set([1, 2, 3])
        >>> s
        {1, 2, 3}
  注意
  1. 傳入的參數(shù) [1,2,3] 是一個(gè) list领炫,顯示{1,2张咳,3}只是告訴人們 set 的內(nèi)部是有 1帝洪,2似舵,3 這三個(gè)元素,顯示順序并不能證明 set 有序葱峡;
  2. set 中的 key 是不會(huì)有重復(fù)的砚哗,如果輸入一個(gè)有重復(fù)元素的 list ,將會(huì)被自動(dòng)去重砰奕;
  3. 與 dict 一樣频祝,不可放入可變對(duì)象,如果對(duì)象可變無(wú)法保證無(wú)重復(fù)元素脆淹;

修改元素

add(key) 添加元素(可以重復(fù)添加常空,但沒(méi)有效果):
        >>> s.add(4)
        >>> s
        {1, 2, 3, 4}
        >>> s.add(4)
        >>> s
        {1, 2, 3, 4}

remove(key) 刪除元素:
        >>> s.remove(4)
        >>> s
        {1, 2, 3}

交集、并集

set 可以看成是數(shù)學(xué)意義上無(wú)序和無(wú)重復(fù)元素的集合
        >>> s1 = set([1, 2, 3])
        >>> s2 = set([2, 3, 4])
        >>> s1 & s2
        {2, 3}
        >>> s1 | s2
        {1, 2, 3, 4}


又議不可變對(duì)象

str 是不可變對(duì)象盖溺。list 是可變對(duì)象漓糙,例如對(duì)其操作,它內(nèi)部的內(nèi)容是會(huì)改變的烘嘱。

>>> a = ['c', 'b', 'a']
        >>> a.sort()
        >>> a
        ['a', 'b', 'c']

如果對(duì)不可變對(duì)象也進(jìn)行操作呢昆禽?使用字符串的 replace() 方法:

>>> a = 'abc'
        >>> a.replace('a', 'A')
        'Abc'
        >>> a
        'abc

雖然時(shí)出現(xiàn)了 Abc,但是變量 a 最后仍然是 abc蝇庭。如果第二句改一下就比較清楚了 b=a.replace('a', 'A')醉鳖, 變的是變量,它指向的是字符串對(duì)象 'abc'哮内,而字符串對(duì)象一直沒(méi)變盗棵,使用了 replace 相當(dāng)于 Python 創(chuàng)建的一個(gè)新的字符串變量。


超卡哇伊小姐姐鎮(zhèn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末北发,一起剝皮案震驚了整個(gè)濱河市纹因,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琳拨,老刑警劉巖瞭恰,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異狱庇,居然都是意外死亡惊畏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門密任,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)颜启,“玉大人,你說(shuō)我怎么就攤上這事批什∨┣” “怎么了社搅?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵驻债,是天一觀的道長(zhǎng)乳规。 經(jīng)常有香客問(wèn)我,道長(zhǎng)合呐,這世上最難降的妖魔是什么暮的? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮淌实,結(jié)果婚禮上冻辩,老公的妹妹穿的比我還像新娘。我一直安慰自己拆祈,他們只是感情好恨闪,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著放坏,像睡著了一般咙咽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淤年,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天钧敞,我揣著相機(jī)與錄音,去河邊找鬼麸粮。 笑死溉苛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弄诲。 我是一名探鬼主播愚战,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼齐遵!你這毒婦竟也來(lái)了凤巨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤洛搀,失蹤者是張志新(化名)和其女友劉穎敢茁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體留美,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彰檬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谎砾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逢倍。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖景图,靈堂內(nèi)的尸體忽然破棺而出较雕,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布亮蒋,位于F島的核電站扣典,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏慎玖。R本人自食惡果不足惜贮尖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趁怔。 院中可真熱鬧湿硝,春花似錦、人聲如沸润努。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铺浇。三九已至蚤吹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間随抠,已是汗流浹背裁着。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拱她,地道東北人二驰。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像秉沼,于是被迫代替她去往敵國(guó)和親桶雀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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