<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python基礎(chǔ):徹底學(xué)會(huì)【字典】

          共 6326字,需瀏覽 13分鐘

           ·

          2020-09-15 08:45

          ↑↑↑點(diǎn)擊上方藍(lán)字,回復(fù)資料,10個(gè)G的驚喜

          作者:陳tooyoung@阿里云Python訓(xùn)練營(yíng)
          博客地址:https://blog.csdn.net/weixin_43509371/article/details/108522941

          可變類(lèi)型與不可變類(lèi)型

          • 序列是以連續(xù)的整數(shù)為索引,與此不同的是,字典以"關(guān)鍵字"為索引,關(guān)鍵字可以是任意不可變類(lèi)型,通常用字符串或數(shù)值。
          • 字典是 Python 唯一的一個(gè) 映射類(lèi)型,字符串、元組、列表屬于序列類(lèi)型

          那么如何快速判斷一個(gè)數(shù)據(jù)類(lèi)型 X 是不是可變類(lèi)型的呢??jī)煞N方法:

          • 麻煩方法:用 id(X) 函數(shù),對(duì) X 進(jìn)行某種操作,比較操作前后的 id,如果不一樣,則 X 不可變,如果一樣,則 X 可變。
          • 便捷方法:用 hash(X),只要不報(bào)錯(cuò),證明 X 可被哈希,即不可變,反過(guò)來(lái)不可被哈希,即可變。
          i?=?1
          print(id(i))??#?140732167000896
          i?=?i?+?2
          print(id(i))??#?140732167000960

          l?=?[1,?2]
          print(id(l))??#?4300825160
          l.append('Python')
          print(id(l))??#?4300825160
          print(hash('Name'))??#?7047218704141848153

          print(hash((1,?2,?'Python')))??#?1704535747474881831

          print(hash([1,?2,?'Python']))
          #?TypeError:?unhashable?type:?'list'


          print(hash({1,?2,?3}))
          #?TypeError:?unhashable?type:?'set'
          • 數(shù)值、字符和元組 都能被哈希,因此它們是不可變類(lèi)型。
          • 列表、集合、字典不能被哈希,因此它是可變類(lèi)型。

          字典的定義

          字典 是無(wú)序的 鍵:值(key:value)對(duì)集合,鍵必須是互不相同的(在同一個(gè)字典之內(nèi))。

          • dict 內(nèi)部存放的順序和 key 放入的順序是沒(méi)有關(guān)系的。
          • dict 查找和插入的速度極快,不會(huì)隨著 key 的增加而增加,但是需要占用大量的內(nèi)存。

          字典 定義語(yǔ)法為 {元素1, 元素2, ..., 元素n}

          • 其中每一個(gè)元素是一個(gè)「鍵值對(duì)」-- 鍵:值 (key:value)
          • 關(guān)鍵點(diǎn)是「大括號(hào) {}」,「逗號(hào) ,」和「冒號(hào) :」
          • 大括號(hào) -- 把所有元素綁在一起
          • 逗號(hào) -- 將每個(gè)鍵值對(duì)分開(kāi)
          • 冒號(hào) -- 將鍵和值分開(kāi)

          創(chuàng)建和訪問(wèn)字典

          brand?=?['李寧',?'耐克',?'阿迪達(dá)斯']
          slogan?=?['一切皆有可能',?'Just?do?it',?'Impossible?is?nothing']
          print('耐克的口號(hào)是:',?slogan[brand.index('耐克')])??
          #?耐克的口號(hào)是:?Just?do?it

          dic?=?{'李寧':?'一切皆有可能',?'耐克':?'Just?do?it',?'阿迪達(dá)斯':?'Impossible?is?nothing'}
          print('耐克的口號(hào)是:',?dic['耐克'])??
          #?耐克的口號(hào)是:?Just?do?it

          【例子】通過(guò)字符串或數(shù)值作為key來(lái)創(chuàng)建字典。

          dic1?=?{1:?'one',?2:?'two',?3:?'three'}
          print(dic1)??#?{1:?'one',?2:?'two',?3:?'three'}
          print(dic1[1])??#?one
          print(dic1[4])??#?KeyError:?4

          dic2?=?{'rice':?35,?'wheat':?101,?'corn':?67}
          print(dic2)??#?{'wheat':?101,?'corn':?67,?'rice':?35}
          print(dic2['rice'])??#?35

          注意:如果我們?nèi)〉逆I在字典中不存在,會(huì)直接報(bào)錯(cuò)KeyError。

          【例子】通過(guò)元組作為key來(lái)創(chuàng)建字典,但一般不這樣使用。

          dic?=?{(1,?2,?3):?"Tom",?"Age":?12,?3:?[3,?5,?7]}
          print(dic)??#?{(1,?2,?3):?'Tom',?'Age':?12,?3:?[3,?5,?7]}
          print(type(dic))??#?

          通過(guò)構(gòu)造函數(shù)dict來(lái)創(chuàng)建字典。

          • dict() 創(chuàng)建一個(gè)空的字典。

          【例子】通過(guò)key直接把數(shù)據(jù)放入字典中,但一個(gè)key只能對(duì)應(yīng)一個(gè)value,多次對(duì)一個(gè)key放入 value,后面的值會(huì)把前面的值沖掉。

          dic?=?dict()
          dic['a']?=?1
          dic['b']?=?2
          dic['c']?=?3

          print(dic)
          #?{'a':?1,?'b':?2,?'c':?3}

          dic['a']?=?11
          print(dic)
          #?{'a':?11,?'b':?2,?'c':?3}

          dic['d']?=?4
          print(dic)
          #?{'a':?11,?'b':?2,?'c':?3,?'d':?4}
          • dict(mapping) new dictionary initialized from a mapping object's (key, value) pairs
          dic1?=?dict([('apple',?4139),?('peach',?4127),?('cherry',?4098)])
          print(dic1)??#?{'cherry':?4098,?'apple':?4139,?'peach':?4127}

          dic2?=?dict((('apple',?4139),?('peach',?4127),?('cherry',?4098)))
          print(dic2)??#?{'peach':?4127,?'cherry':?4098,?'apple':?4139}
          • dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. ?For example: ?dict(one=1, two=2)

          【例子】這種情況下,鍵只能為字符串類(lèi)型,并且創(chuàng)建的時(shí)候字符串不能加引號(hào),加上就會(huì)直接報(bào)語(yǔ)法錯(cuò)誤。

          dic?=?dict(name='Tom',?age=10)
          print(dic)??#?{'name':?'Tom',?'age':?10}
          print(type(dic))??#?

          字典的內(nèi)置方法

          • dict.fromkeys(seq[, value]) 用于創(chuàng)建一個(gè)新字典,以序列 seq 中元素做字典的鍵,value 為字典所有鍵對(duì)應(yīng)的初始值。
          seq?=?('name',?'age',?'sex')
          dic1?=?dict.fromkeys(seq)
          print(dic1)
          #?{'name':?None,?'age':?None,?'sex':?None}

          dic2?=?dict.fromkeys(seq,?10)
          print(dic2)
          #?{'name':?10,?'age':?10,?'sex':?10}

          dic3?=?dict.fromkeys(seq,?('小馬',?'8',?'男'))
          print(dic3)
          #?{'name':?('小馬',?'8',?'男'),?'age':?('小馬',?'8',?'男'),?'sex':?('小馬',?'8',?'男')}
          • dict.keys()返回一個(gè)可迭代對(duì)象,可以使用 list() 來(lái)轉(zhuǎn)換為列表,列表為字典中的所有鍵。
          dic?=?{'Name':?'lsgogroup',?'Age':?7}
          print(dic.keys())??#?dict_keys(['Name',?'Age'])
          lst?=?list(dic.keys())??#?轉(zhuǎn)換為列表
          print(lst)??#?['Name',?'Age']
          • dict.values()返回一個(gè)迭代器,可以使用 list() 來(lái)轉(zhuǎn)換為列表,列表為字典中的所有值。
          dic?=?{'Sex':?'female',?'Age':?7,?'Name':?'Zara'}
          print(dic.values())
          #?dict_values(['female',?7,?'Zara'])

          print(list(dic.values()))
          #?[7,?'female',?'Zara']
          • dict.items()以列表返回可遍歷的 (鍵, 值) 元組數(shù)組。
          dic?=?{'Name':?'Lsgogroup',?'Age':?7}
          print(dic.items())
          #?dict_items([('Name',?'Lsgogroup'),?('Age',?7)])

          print(tuple(dic.items()))
          #?(('Name',?'Lsgogroup'),?('Age',?7))

          print(list(dic.items()))
          #?[('Name',?'Lsgogroup'),?('Age',?7)]
          • dict.get(key, default=None) 返回指定鍵的值,如果值不在字典中返回默認(rèn)值。
          dic?=?{'Name':?'Lsgogroup',?'Age':?27}
          print("Age?值為?:?%s"?%?dic.get('Age'))??#?Age?值為?:?27
          print("Sex?值為?:?%s"?%?dic.get('Sex',?"NA"))??#?Sex?值為?:?NA
          print(dic)??#?{'Name':?'Lsgogroup',?'Age':?27}
          • dict.setdefault(key, default=None)get()方法 類(lèi)似, 如果鍵不存在于字典中,將會(huì)添加鍵并將值設(shè)為默認(rèn)值。
          dic?=?{'Name':?'Lsgogroup',?'Age':?7}
          print("Age?鍵的值為?:?%s"?%?dic.setdefault('Age',?None))??#?Age?鍵的值為?:?7
          print("Sex?鍵的值為?:?%s"?%?dic.setdefault('Sex',?None))??#?Sex?鍵的值為?:?None
          print(dic)??
          #?{'Age':?7,?'Name':?'Lsgogroup',?'Sex':?None}
          • key in dict in 操作符用于判斷鍵是否存在于字典中,如果鍵在字典 dict 里返回true,否則返回false。而not in操作符剛好相反,如果鍵在字典 dict 里返回false,否則返回true
          dic?=?{'Name':?'Lsgogroup',?'Age':?7}

          #?in?檢測(cè)鍵?Age?是否存在
          if?'Age'?in?dic:
          ????print("鍵?Age?存在")
          else:
          ????print("鍵?Age?不存在")

          #?檢測(cè)鍵?Sex?是否存在
          if?'Sex'?in?dic:
          ????print("鍵?Sex?存在")
          else:
          ????print("鍵?Sex?不存在")

          #?not?in?檢測(cè)鍵?Age?是否存在
          if?'Age'?not?in?dic:
          ????print("鍵?Age?不存在")
          else:
          ????print("鍵?Age?存在")

          #?鍵?Age?存在
          #?鍵?Sex?不存在
          #?鍵?Age?存在
          • dict.pop(key[,default])刪除字典給定鍵 key 所對(duì)應(yīng)的值,返回值為被刪除的值。key 值必須給出。若key不存在,則返回 default 值。
          • del dict[key] 刪除字典給定鍵 key 所對(duì)應(yīng)的值。
          dic1?=?{1:?"a",?2:?[1,?2]}
          print(dic1.pop(1),?dic1)??#?a?{2:?[1,?2]}

          #?設(shè)置默認(rèn)值,必須添加,否則報(bào)錯(cuò)
          print(dic1.pop(3,?"nokey"),?dic1)??#?nokey?{2:?[1,?2]}

          del?dic1[2]
          print(dic1)??#?{}
          • dict.popitem()隨機(jī)返回并刪除字典中的一對(duì)鍵和值,如果字典已經(jīng)為空,卻調(diào)用了此方法,就報(bào)出KeyError異常。
          dic1?=?{1:?"a",?2:?[1,?2]}
          print(dic1.popitem())??#?{2:?[1,?2]}
          print(dic1)??#?(1,?'a')
          • dict.clear()用于刪除字典內(nèi)所有元素。
          dic?=?{'Name':?'Zara',?'Age':?7}
          print("字典長(zhǎng)度?:?%d"?%?len(dic))??#?字典長(zhǎng)度?:?2
          dic.clear()
          print("字典刪除后長(zhǎng)度?:?%d"?%?len(dic))??
          #?字典刪除后長(zhǎng)度?:?0
          • dict.copy()返回一個(gè)字典的淺復(fù)制。
          dic1?=?{'Name':?'Lsgogroup',?'Age':?7,?'Class':?'First'}
          dic2?=?dic1.copy()
          print("dic2")??
          #?{'Age':?7,?'Name':?'Lsgogroup',?'Class':?'First'}

          【例子】直接賦值和 copy 的區(qū)別

          dic1?=?{'user':?'lsgogroup',?'num':?[1,?2,?3]}

          #?引用對(duì)象
          dic2?=?dic1??
          #?淺拷貝父對(duì)象(一級(jí)目錄),子對(duì)象(二級(jí)目錄)不拷貝,還是引用
          dic3?=?dic1.copy()??

          print(id(dic1))??#?148635574728
          print(id(dic2))??#?148635574728
          print(id(dic3))??#?148635574344

          #?修改?data?數(shù)據(jù)
          dic1['user']?=?'root'
          dic1['num'].remove(1)

          #?輸出結(jié)果
          print(dic1)??#?{'user':?'root',?'num':?[2,?3]}
          print(dic2)??#?{'user':?'root',?'num':?[2,?3]}
          print(dic3)??#?{'user':?'runoob',?'num':?[2,?3]}
          • dict.update(dict2)把字典參數(shù) dict2key:value對(duì) 更新到字典 dict 里。
          dic?=?{'Name':?'Lsgogroup',?'Age':?7}
          dic2?=?{'Sex':?'female',?'Age':?8}
          dic.update(dic2)
          print(dic)??
          #?{'Sex':?'female',?'Age':?8,?'Name':?'Lsgogroup'}



          掃描二維碼添加好友↓

          推薦閱讀

          (點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)

          震驚!深度學(xué)習(xí)崗位已崩潰!

          Numpy核心語(yǔ)法和代碼整理匯總!

          數(shù)學(xué)系的概率論和我們的不太一樣。。。

          【數(shù)學(xué)史】矩陣和線性代數(shù)原來(lái)是這么來(lái)的

          老鐵,三連支持一下,好嗎?↓↓↓

          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产成人精品一级毛片 | AV电影中文字幕一区 | 操逼视频国产边操边说话 | 成人性爱视频网址导航 | 天天撸天天干 |