python學(xué)習(xí)04——字典

字典的結(jié)構(gòu)類(lèi)似于json中的對(duì)象——{"張三": 1, "李四": 2},實(shí)現(xiàn)原理有點(diǎn)類(lèi)似于Java中的HashMap

特點(diǎn):

  • 所有元素都是key-value對(duì),key不允許重復(fù),value可以重復(fù)
  • 字典中的元素是無(wú)序的
  • 字典中的key必須是不可變對(duì)象
  • 字典比較占用內(nèi)存空間

1. 字典的創(chuàng)建

字典的創(chuàng)建方式有兩種:

  • 使用{}創(chuàng)建
  • 使用內(nèi)置函數(shù)dict()創(chuàng)建
# 使用花括號(hào){}創(chuàng)建
mydict = {"張三": 18, "李四": 25}
print(mydict)  # {'張三': 18, '李四': 25}

# 使用內(nèi)置函數(shù)dict()創(chuàng)建
mydict = dict(name="張三", age=18)
print(mydict)  # {'name': '張三', 'age': 18}

2. 字典的元素查找

查找方式有兩種:

  • 使用[]:如果key沒(méi)有,則拋出異常。
  • 使用get()函數(shù):如果key沒(méi)有,返回None,并且可以指定如果沒(méi)有查找到該value,則指定返回值。

2.1 使用[]

mydict = {"張三": 18, "李四": 25}
print(mydict)  # {'張三': 18, '李四': 25}

age = mydict["張三"]
print(age)  # 18
# 如果沒(méi)有,報(bào)錯(cuò)
# age = mydict["王五"] KeyError: '王五'

2.2 使用get()函數(shù)

mydict = {"張三": 18, "李四": 25}
print(mydict)  # {'張三': 18, '李四': 25}

# 查找
age = mydict.get("張三")
print(age)  # 18

# 沒(méi)有查詢(xún)到返回None
age = mydict.get("王五")
print(age)  # None

# 指定沒(méi)查詢(xún)到的返回值
age = mydict.get("王五", -1)
print(age)  # -1

3. 字典的增刪改操作

3.1 判斷元素

使用innot in判斷元素是否存在。

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

print("張三" in mydict)  # True
print("張三" not in mydict)  # False

3.2 增加元素

mydict = {"張三": 18, "李四": 25}
print(mydict)  # {'張三': 18, '李四': 25}

# 增加元素
mydict["王五"] = 30
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

3.3 刪除元素

3.3.1 刪除某個(gè)元素

使用del進(jìn)行刪除某個(gè)元素操作,沒(méi)有則報(bào)錯(cuò)。

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25}

# 刪除某個(gè)元素
del mydict["王五"]
print(mydict)  # {'張三': 18, '李四': 25}

# 刪除某個(gè)元素 沒(méi)有則報(bào)錯(cuò)
# del mydict["陳六"]  KeyError: '陳六'

3.3.2 清空字典元素

使用clear()清空字典。

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

mydict.clear()
print(mydict)  # {}

3.4 修改元素的值

修改元素的值,甚至可以修改數(shù)據(jù)類(lèi)型

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

mydict["王五"] = "python"
print(mydict)  # {'張三': 18, '李四': 25, '王五': 'python'}

4. 獲取字典的視圖

4.1 獲取字典的keys

通過(guò)keys()獲取字典的keys,得到的數(shù)據(jù)類(lèi)型是dict_keys,可以用list()keys轉(zhuǎn)換成list

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

# 獲取keys
myKey = mydict.keys()

print(myKey)  # dict_keys(['張三', '李四', '王五'])

# 獲取key的數(shù)據(jù)類(lèi)型
print(type(myKey))  # <class 'dict_keys'>

# 將keys轉(zhuǎn)換成list
print(list(myKey))  # ['張三', '李四', '王五']

4.2 獲取字典的values

通過(guò)values()獲取字典的values,得到的數(shù)據(jù)類(lèi)型是dict_values,可以用list()values轉(zhuǎn)換成list

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

# 獲取values
myValue = mydict.values()

print(myValue)  # dict_values([18, 25, 30])

# 獲取values的數(shù)據(jù)類(lèi)型
print(type(myValue))  # <class 'dict_values'>

# 將values轉(zhuǎn)換成list
print(list(myValue))  # [18, 25, 30]

4.3 獲取字典的元組類(lèi)型

通過(guò)items()可以獲取字典的元組,轉(zhuǎn)換成的list中的每個(gè)元素都是一個(gè)元組。

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

# items
myItem = mydict.items()

print(myItem)  # dict_items([('張三', 18), ('李四', 25), ('王五', 30)])

# 獲取items的數(shù)據(jù)類(lèi)型
print(type(myItem))  # <class 'dict_items'>

# 將items轉(zhuǎn)換成list
print(list(myItem))  # [('張三', 18), ('李四', 25), ('王五', 30)]

5. 字典元素的遍歷

mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict)  # {'張三': 18, '李四': 25, '王五': 30}

for item in mydict:
    print(item, mydict[item], mydict.get(item))

# 輸出:
# 張三 18 18
# 李四 25 25
# 王五 30 30

6. 字典生成式

字典的表達(dá)式依賴(lài)內(nèi)置函數(shù)zip()

6.1 生成元組的列表

name = ["James", "Jordan", "Kobe"]
count = [4, 6, 5]

myList = zip(name, count)
print(myList)  # <zip object at 0x0000020135939D80>
print(type(myList))  # <class 'zip'>
print(list(myList))  # [('James', 4), ('Jordan', 6), ('Kobe', 5)]

6.2 生成字典

字典生成式為:

{key表達(dá)式: value表達(dá)式 for key, value in zip(key列表, value列表)}

舉例:

name = ["James", "Jordan", "Kobe"]
count = [4, 6, 5]

mydict = {name: count for name, count in zip(name, count)}
print(mydict)  # {'James': 4, 'Jordan': 6, 'Kobe': 5}

# 生成的表達(dá)式
mydict = {name.upper(): count+10 for name, count in zip(name, count)}
print(mydict)  # {'JAMES': 14, 'JORDAN': 16, 'KOBE': 15}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,034評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 175,327評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 62,554評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,337評(píng)論 6 404
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 54,883評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,114評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,625評(píng)論 1 332
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,555評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,737評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,973評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,615評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,343評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,699評(píng)論 2 370

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