7. 數(shù)據(jù)類型 —— 字典

字典屬于容器存儲(chǔ)肚邢、可變、映射訪問的數(shù)據(jù)類型乙各。相對(duì)于列表等數(shù)據(jù)類型,字典中的元素是通過鍵來進(jìn)行存取幢竹,而不是通過偏移量 —— 或者可以理解為列表等數(shù)據(jù)類型的鍵即為偏移量耳峦,而字典的鍵可以為任意值。并且在字典中元素是沒有特定順序的焕毫,Python 將字典中的元素從左到右隨機(jī)排序蹲坷,以便快速查找。

1. 創(chuàng)建字典

字典使用 { } 來定義邑飒,字典元素的語法格式為 Key: Value循签,不同的元素使用 , 分隔。將字典直接賦值給變量即可創(chuàng)建一個(gè)新的字典

>>> dict = {}                                                   # 一對(duì) {} 可以創(chuàng)建一個(gè)空字典
>>> dict
{}
>>> dict = {"name": "ybian", "year": 2015}                      # 字典的鍵-值可以是任意數(shù)據(jù)類型疙咸,且可以嵌套
>>> dict
{"name": "ybian", "year": 2015}

除此之外還可以使用 dict() 方法創(chuàng)建字典

>>> a = dict(one=1, two=2, three=3)                             # 使用 dict 方法創(chuàng)建字典县匠,如果輸入為一個(gè)映射對(duì)象,則直接進(jìn)行淺復(fù)制
>>> a
{'three': 3, 'two': 2, 'one': 1}
>>> b = dict([('one', 1), ('two', 2), ('three', 3)])            # 如果輸入為可迭代的,則可迭代元素必須成對(duì)出現(xiàn)乞旦,在每個(gè)值對(duì)中第一個(gè)元素為鍵贼穆,第二個(gè)為值 
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))

使用 fromkeys() 方法創(chuàng)建字典

>>> a = {}.fromkeys(('x', 'y'), 1)                              # 使用 fromkeys 創(chuàng)建一個(gè)新的字典,且元素具有相同的值
>>> a
{'y': 1, 'x': 1}
>>> a = {}.fromkeys(('x', 'y'))                                 # 如果沒有指定值時(shí)兰粉,默認(rèn)為 None
>>> a
{'y': None, 'x': None}

2. 字典的基本操作

  • 訪問字典中的元素

    字典為映射訪問的數(shù)據(jù)類型故痊,只需指定鍵即可訪問字典的元素值

>>> a = {'one': 1, 'two': 2, 'three': 3}
>>> a['one']                                                   # 指定要查找元素的鍵即可訪問字典中的元素
1
>>> a['four']                                                  # 如果指定的鍵在字典中不存在玖姑,會(huì)引發(fā)一個(gè) KeyError 異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'four'
  • 判斷字典中是否存在某個(gè)鍵

    使用 in愕秫、 not in 即可判斷一個(gè)鍵是否存在于字典中

>>> 'one' in a                                                # 判斷鍵 one 是否在字典 a 中 
True
>>> 'four' in a 
False
  • 修改字典中某個(gè)鍵的值

    直接將要修改的數(shù)據(jù)賦值給鍵即可

>>> a['one'] = 0                                             # 修改字典中鍵為 one 的元素的值
>>> a
{'three': 3, 'two': 2, 'one': 0}
  • 刪除字典中的元素

    使用 del 刪除字典指定的鍵-值

>>> del a['one']                                            # 刪除字典中鍵為 one 的元素
>>> a
{'three': 3, 'two': 2}
>>> a.clear()                                               # 清空字典中的所有元素 
>>> a
{}

3. 字典內(nèi)建函數(shù)

  • len()

    len() 函數(shù)返回字典中的鍵-值的數(shù)目

>>> len(a)
3
  • keys()values() 客峭、 items()

    這三個(gè)方法在需要對(duì)字典中的鍵或值進(jìn)行遍歷時(shí)十分有效

>>>a.keys()                                                # 返回一個(gè)由字典的鍵組成的列表 
['three', 'two', 'one']
>>> a.values()                                             # 返回一個(gè)由字典的值組成的列表
[3, 2, 1]
>>> a.items()                                              # 返回一個(gè)由所有(鍵-值)元組組成的列表
[('three', 3), ('two', 2), ('one', 1)]
  • get()

    使用 get() 方法可以避免由于鍵的缺失而引起的異常

>>> a.get('one')                                         # 使用 get 方法可以獲取指定鍵的值
1
>>> print a.get('four')                                  # 當(dāng)指定的鍵在字典中不存在時(shí)返回 None 或指定的默認(rèn)值
None
  • update()

    update 方法可以將兩個(gè)字典合并豫领,當(dāng)遇到相同的鍵時(shí)會(huì)直接覆蓋

>>> b = {'one':0, 'four':4}
>>> a.update(b)                                          # 將 a 和 b 合并,并將 b 中的 'one' 對(duì)應(yīng)的值覆蓋 a 中 'one' 對(duì)應(yīng)的值
>>> a
{'four': 4, 'three': 3, 'two': 2, 'one': 0}
  • setdefault()

    檢查字典中是否存在某個(gè)鍵舔琅,如果存在獲取該鍵對(duì)應(yīng)的值等恐,否則進(jìn)行賦值并返回值

>>> a.setdefault('one',0)                                # 由于 a 中存在 'one',返回對(duì)應(yīng)值不做任何操作
1
>>> a.setdefault('four',4)                               # a 中不存在 'four'备蚓,設(shè)置 four: 4 并返回值 
4
>>> a
{'four': 4, 'three': 3, 'two': 2, 'one': 1}
  • pop()

    類似于列表中的 pop() 函數(shù)课蔬,刪除對(duì)應(yīng)鍵并返回值

>>> a.pop('four')
4
>>> a
{'three': 3, 'two': 2, 'one': 1}

4. 字典注意事項(xiàng)

  • 每個(gè)鍵只能對(duì)應(yīng)一個(gè)值,當(dāng)鍵發(fā)生沖突時(shí)直接覆蓋值
>>> a = {'one':1, 'one':0}
>>> a
{'one': 0}
  • 鍵必須是可哈希的

    所有不可變的數(shù)據(jù)類型都是可哈希的(對(duì)于數(shù)字而言郊尝,值相等數(shù)字表示同一個(gè)鍵二跋,即 1 和 1.0 為同一個(gè)鍵)。使用 hash() 函數(shù)可以判斷一個(gè)數(shù)據(jù)是否是可哈希的

>>> hash('one')                                        # 如果參數(shù)是可哈希則會(huì)返回其哈希值
4135046628013640463
>>> hash([1, 2])                                       # 如果參數(shù)是不可哈希的會(huì)引發(fā)異常 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
  • 序列運(yùn)算對(duì)字典無效

    字典是無序的數(shù)據(jù)類型流昏,因此所有序列運(yùn)算對(duì)字典無效且會(huì)引發(fā)異常

參考
Dict

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扎即,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子况凉,更是在濱河造成了極大的恐慌谚鄙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刁绒,死亡現(xiàn)場(chǎng)離奇詭異闷营,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)知市,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門傻盟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫂丙,你說我怎么就攤上這事娘赴。” “怎么了跟啤?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵筝闹,是天一觀的道長媳叨。 經(jīng)常有香客問我腥光,道長关顷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任武福,我火速辦了婚禮议双,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捉片。我一直安慰自己平痰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布伍纫。 她就那樣靜靜地躺著宗雇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪莹规。 梳的紋絲不亂的頭發(fā)上赔蒲,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音良漱,去河邊找鬼舞虱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛母市,可吹牛的內(nèi)容都是我干的矾兜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼患久,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼椅寺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒋失,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤返帕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后高镐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溉旋,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年嫉髓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了观腊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡算行,死狀恐怖梧油,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情州邢,我是刑警寧澤儡陨,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響骗村,放射性物質(zhì)發(fā)生泄漏嫌褪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一胚股、第九天 我趴在偏房一處隱蔽的房頂上張望笼痛。 院中可真熱鬧,春花似錦琅拌、人聲如沸缨伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻坊。三九已至,卻和暖如春党晋,著一層夾襖步出監(jiān)牢的瞬間谭胚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工隶校, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漏益,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓深胳,卻偏偏與公主長得像绰疤,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舞终,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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