Python 基礎起步 (七) 初識字典 Dictionary(絕命毒師前傳)

你們好,我是小白,書接上回,咱們目前已經瞭解到了Python中很常見的一種數據類型:List,也初步掌握了一些Python自帶的有關List的方法,今天爲你們介紹另一種異常火爆的數據結構:字典Dictionary,不誇張的講,基本上咱們熟悉了列表和字典後有關數據結構這裏就差很少啦,實際的項目中應用的最多的也是這兩種,至於其餘的Set,Tuple平時用的很少~數據庫

字典究竟是什麼

簡單來講,字典是另外一種可變數據類型,且可存儲任意類型對象。就是說字典裏面存儲的值咱們能夠修改~
字典的每一個鍵值(key=>value)對用冒號(:)分割,每一個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式以下所示:微信

d = {                    #這裏d的結構就是一個字典
    <key>: <value>,      #基礎的數據結構就是一個key=>value
    <key>: <value>,
      .
      .
      .
    <key>: <value>
}

鍵必須是惟一的,但值則沒必要。值能夠取任何數據類型,我會在接下來用詳細的例子詳細解釋。
若是咱們要把字典和列表作一個對比總結的話,能夠發現以下特色:數據結構

  • 列表和字典的值均可以被修改
  • 列表和字典都是動態結構,也就是說能夠任意插入值,無限擴展
  • 列表中獲取值的方式是經過Index(索引)
  • 字典中獲取值是經過key(鍵)
  • 列表字典均可以層次嵌套,好比一個列表中的值能夠是另外一個列表,

好啦,讓咱們如今開始今天的栗子吧~學習

Dictionary字典經常使用方法(內含扎心舉例):

建立一個字典

首先,不知道有沒有小白朋友們感到疑惑,既然已經有列表了,爲啥還須要字典這種數據結構 ?緣由很簡單哈哈,出於實際須要,我來舉個使人傷心的例子說明:spa

你是北京知名985,211畢業的北漂有爲青年xiaobai,躲過了這輪互聯網寒冬,23歲的你天天最愛穿着格子衫去街角咖啡廳點一杯能夠無限續杯的伯爵紅茶,順便打量着周圍45度仰臉拍抖音的小姐姐,意淫着一些不可告人的事情,這時來了一個青春無比的妹子,交談甚歡後,同爲北漂的她得知你技術入股進入一家創業公司,以及老闆忽悠你的超級大餅和期權,心裏狂喜,碰到潛力股了呀,程序猿呀,技術入股呀 !而你以多年老司機經驗用餘光掃描了妹子的三圍,得出結論大概是82,62,82後,馬上邀請她去廁所作了一些羞羞的事情( 此處省略 6秒 ),幾個月後迅速結婚而後生了一個醜萌的孩子...code

好啦,請你把這段經歷用列表來表示一下 ? WTF! 答案几乎不可能,可是用字典的話某種程度上會解釋的清楚一些~ 哈哈
若是用列表,就只能這麼表示:對象

young_man = ['xiaobai',985,23,'Developper'.......]

徹底不懂在說啥呀...可是若是用字典會舒服的多:blog

young_man = {'first_name':'bai',
                  'family_name':'xiao',
                  'age':23,
                  'city':'Beijing',
                  'university_rank':'985',
                  'university_name':'beida',
                  'job':'Developer',
                  'salary':20000.00,
                  'company':'Start Up',
                  'married':True,
                  'wife_measurements':[82,62,82],
                  'number_of_children':1,
                  'future':None
                 }

瞬間感受信息量暴漲有木有 ! 其實當我最開始接觸字典的時候,我對它的第一感受是通過select語句從數據庫查詢出的一個結果哈哈~, 好啦,讓咱們查看一下咱們建立的這個字典:教程

print(young_man)
Out:    {'first_name': 'bai',
         'family_name': 'xiao',
         'age': 23,
         'city': 'Beijing',
         'university_rank': '985',
         'university_name': 'beida',
         'job': 'Developer',
         'salary': 20000.00,
         'company': 'Start Up',
         'married': True,
         'wife_measurements': [82, 62, 82],
         'number_of_children': 1,
         'future': None}

你們能夠發現輸出的格式和建立的格式基本同樣,都是符合上面咱們提到過的key=>value 的形式,這裏咱們建立了一個字典並把字典的值賦給變量young_man,幾點須要你們注意:索引

  • 字典的鍵是惟一的,類型也能夠爲int,我這個例子都是str類型,可是基本int類型的極少
  • 在'university_name':'985' 這組信息中985是字符型,可是底下"number_of_children"的值爲1,1是int型
  • 字典的值能夠是一個列表或者另外一個列表,好比這裏'wife_measurements’是指xiaobai老婆的三圍,那能夠傳遞一個包含三個值的列表,這也是咱們上面說到過的列表字典均可以相互嵌套
  • 字典的值能夠是任意類型,好比這裏的"future":None, 由於,由於你沒有將來啊,啊哈哈
訪問字典裏的值

如今咱們已經成功建立了一個字典,那麼如何獲取字典中的值呢?咱們知道在List中能夠經過切片[start_index:end_index]來獲取,字典裏提供了另外一種形式:

dict[name_of_key]   #把相應的鍵放入到方括號中

如今讓咱們得到xiaobai的姓和工資:

print("The first name of young man is :", young_man['first_name'])
    print("Salary of young man:",young_man['salary'])

Out: The first name of young man is: bai
     Salary of young man: 20000.00

很簡單吧,若是是xiaobai老婆的三圍呢?

print(young_man['wife_measurements'])
Out:[82, 62, 82]

若是就對胸圍感興趣呢? 由於'wife_measurements'這個鍵對應的值爲一個列表,咱們能夠接着使用列表獲取值的方法:

print('The Bust measure is',young_man['wife_measurements'][0],'cm')
Out: The Bust measure is 82 cm

若是對全部的值都感興趣呢?那很簡單,字典提供了一個很是簡單的方法values():

print(young_man.values())
Out:dict_values(['bai', 'xiao', 23, 'Beijing', '985', 'beida', 'Developer', 10000, 'Start Up', True, [82, 62, 82], 1, None])

這樣咱們就得到young_man裏面全部的值了

訪問字典裏的鍵

不用多解釋,很簡單,也是一個自帶的方法.keys():

print(young_man.keys())
   Out: dict_keys(['first_name', 'family_name', 'age', 'city', 'university_rank', 'university_name', 'job', 'salary', 'company', 'married', 'wife_measurements', 'number_of_children', 'future'])
訪問字典裏的鍵和值

通過上面的介紹,咱們能夠分別得到字典的值和鍵,如今咱們要把他們融合一下,其實很簡單,由於自己字典能夠迭代:

for k,v in young_man.items():
        print(k,":",v)

Out:first_name : bai
    family_name : xiao
    age : 23
    city : Beijing
    university_rank : 985
    university_name : beida
    job : Developer
    salary : 10000
    company : Start Up
    married : True
    wife_measurements : [82, 62, 82]
    number_of_children : 1
    future : None

字典裏有一個方法:.items(),說白了就是獲取到當前的鍵和值,這裏咱們用一個for循環能夠迭代這個字典,分別輸出鍵和值,這裏注意一下,k,v是什麼不重要,你們能夠把k,v換成其餘的字母都是沒有問題的,有關字典的不少實用技巧咱們下一期會講。

添加,修改字典裏的值

結婚1年後的你攢了10萬塊,加上6個錢包的100萬在北京付了首付,買來了小兩居,然而醜萌的孩子,漂亮的老婆,加上房子的月供讓你不堪重負,好在通過你的努力,如今的工資已經漲到了3萬,變成了傳說中的產品經理,身旁電視裏響起共克時艱的號召,看似美好的生活向你招手,但壞消息忽然接踵而至,首先第二個孩子的出生讓你的經濟情況雪上加霜,你在感嘆杜蕾斯的產品質量同時忽然發現事情有些不對......

你突然回憶起不少細節,最近幾個月趕項目,常常在深夜回家時發現一輛扎眼的保時捷正開出小區,到家時妻子常常滿面潮紅的剛剛洗完澡出如今你面前, 你常常關注着中興老員工跳樓,xxx創業失敗煤氣自殺等負面新聞,卻忽略了妻子錢包多出來的各類美容健身購物酒店卡....

眼前冒綠星的你心中一涼,拿起土著的照片看了看,又看看本身懷裏新出生的老二,眉宇間竟有幾分類似,腦殼嗡的一聲後決定要去作親子鑑定...

首先先讓咱們看看如何在字典裏新加一個值,讓咱們把xiaobai的銀行存款和買加進去:

young_man['bank_account']=100000
young_man['Own_house']=True

其實很簡單啦,只要把ke和value按照圖中形式添加就行了,這個時候咱們再看young_man這個字典就會發現已經多了兩個值:

{'first_name': 'bai', 'family_name': 'xiao', 'age': 23, 'city': 'Beijing', 'university_rank': '985', 'university_name': 'beida', 'job': 'Developer', 'salary': 20000.0, 'company': 'Start Up', 'married': True, 'wife_measurements': [82, 62, 82], 'number_of_children': 1, 'future': None, 'bank_account': 100000, 'Own_house': True}

其次,xiaobai的職業,薪水,和孩子的數量有了變化,此時須要對字典中對應的值進行修改,這裏十分簡單:

young_man['age']+=1
young_man['job'] = 'Product Manager'
young_man['salary']=30000.00
young_man['number_of_children']=2

再看一下如今的young_man:

{'first_name': 'bai', 'family_name': 'xiao', 'age': 24, 'city': 'Beijing', 'university_rank': '985', 'university_name': 'beida', 'job': 'Product Manager', 'salary': 30000.0, 'company': 'Start Up', 'married': True, 'wife_measurements': [82, 62, 82], 'number_of_children': 2, 'future': None, 'bank_account': 100000, 'Own_house': True}

此外若是修改多個值,用update()是最方便的,咱們下一篇筆記會說~

刪除字典裏的值

醫院的結果出來了,不出意料,杜蕾斯質量沒問題,你迅速回到家中準備興師問罪,卻發現妻子早已準備好了離婚協議,在暴怒之中的你想也沒想就選擇了淨身出戶,把全部的一切都留給了妻子,本身沒日沒夜地工做期待有一天公司上市本身套現離場,繼續開始人生下半場,然而一切都是命中註定,不知怎麼,你也成爲了《就算老公一毛錢股份都沒拿到,在我內心,他依然是最牛逼的創業者》裏的主角,命運向你展現了它猙獰的一面,你最後的但願隨之破滅,終日借酒澆愁。

在一個百無聊賴的晚上,你帶着僅有的幾千塊錢作了一次高級大保健,負責給你服務的小姐姐名叫skyler,來自美國新墨西哥州的Albuquerque市,人生失意的你唱着崔健的<<一無全部>>和她傾訴了本身的前半生,笑靨如花的小姐姐安慰了你,向你描述了美利堅大地上美好的一切和本身一樣悲慘的前半生,同時天涯淪落人,相逢何須曾相識!

伴隨着大保健配套的bgm《沙漠駱駝》,醉眼朦朧的你彷彿看到了遙遠的Albuquerque市,便宜的大別墅和skyler的笑臉,一切盡在咫尺,卻又高不可攀。。。

回到正題,這裏xiaobai選擇淨身出戶,所以不少屬於他的東西所有沒了,刪除字典中的值很簡單,只須要del關鍵字:

clipboard.png

這裏刪除的東西有點多,我利用了上篇筆記講過的知識,首先創建了一個列表,裝入young_man的想要刪除的鍵值,而後利用迭代一次刪除,這並非一個優雅的方法,可是目的是讓你們看一下列表和字典的一個結合操做,如今再看一下young_man:

{'first_name': 'bai',
 'family_name': 'xiao',
 'age': 24,
 'city': 'Beijing',
 'university_rank': '985',
 'university_name': 'beida',
 'future': None}

這個時候若是咱們還想看看銀行存款是不可能的了,若是咱們嘗試老方法:

young_man['bank_account']   # ERROR

會很容易的報錯,由於在字典中已經沒有這個值了,爲了不報錯,我推薦你們使用get方法:

print(young_man.get('bank_account','Not Found'))  # 若是沒有輸出Not Found
Out: Not Found
建立字典的其餘方式*

還未到30的你作出了一我的生中最重要的決定,那就是和skyler一塊兒去她的老家Albuquerque市,從零開始
你用你僅存的化學知識在當地的高中謀取到了一個化學老師的工做,利用本身姓名xiaobai起了一個地道的美國名字:Walter White, 小城市的生活清閒愜意,當地的炸雞店「Los Pollos Hermanos」味美絕倫,你和skyler也有了愛的結晶,又一個醜萌並且先天殘疾的孩子出生了。。

此時的xiaobai已經有了全新的身份,這裏咱們換一種方式建立他的全新我的信息:

walter_white_keys = ['name','age','job','subject','adress','wife']
walter_white_values = ['Walter White',50,'Teacher','Chemistry','Albuquerque','Skyler']
Breaking_Bad = dict(zip(walter_white_keys,walter_white_values))

查看一下全新的老白:

print(Breaking_Bad)
    {'name': 'Walter White',
     'age': 50,
     'job': 'Teacher',
 'subject': 'Chemistry',
  'adress': 'Albuquerque',
    'wife': 'Skyler'}
清空字典*

你也會時常想起國內拋下的孩子,感慨天道有輪迴,善惡到頭終有報,20年如白駒過隙, 稍縱即逝,此刻你已年近50,知天命的年齡被診斷出了癌症,正當你以爲人生無望的時候,一個曾經教過的小混混學生Jesse Pinkman出如今你的面前,今後江湖上開始了你的傳說。。。

故事的最後,你看着腹部緩緩流出的鮮血,沒有理會,依然專一地在製做眼前令無數人癡迷的藍色結晶物,直到體力不支緩緩倒地,在生命的最後時刻,伴隨着耳邊的《Baby Blue》,眼前依稀看到了30年的那個意氣風發的少年坐在街邊咖啡館,正專一地學習Python,直到一個女孩款款向他走來。。。。。。

至此,一代梟雄終落幕,最後讓咱們忍住眼淚,敲下最後的代碼:

Breaking_Bad.clear()
 del Breaking_Bad

我想可能有一句話能歸納最後時刻老白的心裏想法:我愛你不後悔,也尊重故事的結尾

clipboard.png

若是你們對Dict的其餘常見使用方法感興趣,能夠關注個人微信公衆號Python極簡教程,我會把最高效,簡潔的小技巧一一記錄下來,分享給你們:

圖片描述

相關文章
相關標籤/搜索