<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 字典這6個使用技巧著實(shí)太妙!

          共 3152字,需瀏覽 7分鐘

           ·

          2022-03-04 13:59

          關(guān)注"Python學(xué)習(xí)與數(shù)據(jù)挖掘"

          設(shè)為“置頂或星標(biāo)”,第一時間送達(dá)干貨

          資料專欄

          李航老師《統(tǒng)計學(xué)習(xí)方法(第二版)》課件&代碼

          【視頻+PPT】李宏毅老師機(jī)器學(xué)習(xí)40講

          Python 的優(yōu)點(diǎn)之一是字典可以與 JSON 對象無縫集成,這使得字典數(shù)據(jù)結(jié)構(gòu)的使用比其他編程語言更頻繁。

          在這篇文章中,我將介紹 6 個關(guān)于 Python 字典的技巧,相信如果你以前不知道這些技巧,你會從中受益。喜歡本文點(diǎn)贊、收藏、關(guān)注

          1、按值對字典數(shù)組進(jìn)行排序

          我們從一些 Web API 接收 JSON 對象數(shù)組是很常見的。假設(shè)我們已經(jīng)在 Python 列表中讀取了它們。現(xiàn)在我們要按照里面的某個值對這些字典進(jìn)行排序。

          通常,當(dāng)我們想要對列表進(jìn)行排序時,sorted() 函數(shù)將非常容易使用。但是,這一次我們要根據(jù)它包含的字典對象的值對列表進(jìn)行排序。事實(shí)上, sorted() 函數(shù)有一個參數(shù)叫做 key。

          讓我們首先創(chuàng)建一個字典列表。假設(shè)我們想按人們的年齡對字典進(jìn)行排序。

          students?=?[
          ????{'name':?'Alice',?'age':?40},
          ????{'name':?'Bob',?'age':?37},
          ????{'name':?'Chris',?'age':?33}
          ]

          然后,我們可以這樣創(chuàng)建一個函數(shù):

          def?get_age(dict_item):
          ????return?dict_item['age']

          現(xiàn)在,我們可以在 sorted() 函數(shù)中使用 get_age 函數(shù)

          sorted(students,?key=get_age)

          我們可以看到 get_age() 函數(shù)非常簡單,我們可以將它簡稱為 lambda 函數(shù)。

          sorted(students,?key=lambda?item:?item['age'],?reverse=True)

          在上面的例子中,我們使用 lambda 編寫了一個內(nèi)聯(lián)函數(shù)。

          我們展開按 key 排序的用法

          雖然這不適用于字典,但我只想展示 sorted()函數(shù)的擴(kuò)展用法。假設(shè)我們有一個字符串列表如下

          strings?=?[
          ????'aaa3',
          ????'bbb2',
          ????'ccc1',
          ????'ddd5'
          ]

          如果我們使用 sorted() 函數(shù)對其進(jìn)行排序,則必須基于每個字符串的首字母。因此,不應(yīng)更改順序。但是,如果我們想根據(jù)最后一位數(shù)字對列表進(jìn)行排序怎么辦?我們可以編寫一個 lambda 函數(shù)來獲取字符串的最后一個字符。

          2、按鍵或值對字典進(jìn)行排序

          my_dict?=?{'c':?1,?'b':?2,?'a':?3}

          在 Python 3.6 之前,不要為此煩惱,因?yàn)樽值涫菬o序?qū)崿F(xiàn)的。換句話說,我們只能對字典進(jìn)行排序并按順序打印。這可以在 for 循環(huán)中輕松完成。如果項目的順序很重要,我們需要使用 Ordered Dictionary。

          from?collections?import?OrderedDict
          my_ordered_dict?=?OrderedDict(sorted(my_dict.items()))

          但是從 Python 3.6 開始,字典將具有順序,這意味著對字典進(jìn)行排序開始變得有意義。如果我們想按字典的鍵對字典進(jìn)行排序,我們可以簡單地使用 sorted() 函數(shù)對項目進(jìn)行排序,然后將它們轉(zhuǎn)換回字典。

          按字典值排序

          如果我們想按值對字典進(jìn)行排序,我們將需要再次使用從前面的問題中得到的技巧。那就是使用 sorted() 函數(shù)的關(guān)鍵參數(shù)。

          dict(sorted(my_dict.items(),?key=lambda?item:?item[1]))

          由于字典的 items() 將返回元組,我們可以使用訂閱 [1] 訪問它的第二個元素,這將是值。

          3、使用推導(dǎo)創(chuàng)建字典

          當(dāng)我們想用 for 循環(huán)創(chuàng)建一個邏輯簡單的字典時,使用字典推導(dǎo)可以非常簡潔高效。

          例如,我們想使用 sqaure_x 作為鍵,其中 x 是一個數(shù)字,那么這個值應(yīng)該是對應(yīng)值的平方。我們可以使用帶有 range() 函數(shù)的 for 循環(huán)來獲取數(shù)字序列,然后按如下方式創(chuàng)建字典。

          4、將兩個列表拼接成字典

          有時,我們可能會分別獲取鍵和值。兩個能夠?qū)⒔邮盏降牧斜矸葱蛄谢癁樽值湟怨┮院笫褂茫覀儽仨殞⑺鼈兤唇釉谝黄稹?/p>

          通常我們可以使用 for 循環(huán),本文分享一個更好的方法,它非常 Pythonic。

          keys?=?['name',?'age',?'skill']
          values?=?['Chris',?33,?'Python']
          my_dict?=?dict(zip(keys,?values))

          使用 zip() 函數(shù)還有更多好處。例如,如果我們有兩個長度不同的列表,多余的項目將被忽略。

          keys?=?['name',?'age',?'skill']
          values?=?['Chris',?33,?'Python',?'English']
          my_dict?=?dict(zip(keys,?values))

          在上面的示例中,第二個列表中的字符串"English"被忽略了,因?yàn)樗鼪]有對應(yīng)的鍵。

          如果我們知道列表長度應(yīng)該嚴(yán)格相同,我們也可以強(qiáng)制執(zhí)行。所以,如果兩個列表的長度不同,就會拋出錯誤。請注意,此嚴(yán)格標(biāo)志是在 Python 3.10 中添加的。

          5、合并兩個字典

          合并兩個或多個字典可能是非常頻繁的操作,它最棘手的是在不同的 Python 版本中使用不同的方法。

          在 Python 3.4 或更低版本中

          我們可以使用字典的 update() 函數(shù)。它會將另一個字典附加到當(dāng)前字典。但是,缺點(diǎn)是第一個字典 my_dict1 被修改了。如果我們想保留兩個原始字典,我們必須創(chuàng)建第三個。

          從 Python 3.5 開始,它將用于解壓列表的星號 *list 語法擴(kuò)展為使用雙星號 **dictioanry 解壓字典。

          因此,我們可以創(chuàng)建一個新字典,并將其中的兩個原始字典解包。

          從 Python 3.9 開始

          在 Python 3.9 中,涉及到一種新語法,即使用管道 | 合并兩個字典。

          6、更改密鑰的名稱

          如果我們想更改密鑰的名稱怎么辦?假設(shè)我們從一個 API 接收到 JSON 對象,但是鍵名與我們在數(shù)據(jù)庫中的不一致。因此,在將對象保存到數(shù)據(jù)庫之前,我們需要更改鍵的名稱。

          請不要寫一個for循環(huán)來查找有key的item,除非有很多key需要按照一定的規(guī)則改變。相反,一種簡單的方法是使用簡單地將值傳遞給新項目,然后刪除舊項目。執(zhí)行上述示例后,鍵"skill"已更改為"programming_language"。這是實(shí)現(xiàn)這一點(diǎn)的最直觀的方法。但是,我們甚至可以通過使用字典的 pop() 函數(shù)來簡化它。

          這個想法是在字典中創(chuàng)建一個新鍵并從彈出的舊鍵值對中獲取值。之后,用舊值創(chuàng)建新鍵,舊鍵值對已經(jīng)消失。

          總結(jié)

          字典是 Python 中最重要的數(shù)據(jù)結(jié)構(gòu)之一。因此,知道一些技巧來做一些頻繁的操作是非常重要的,這些技巧不僅可以節(jié)省我們重新發(fā)明輪子的時間,還可以提供更高的性能。

          長按或掃描下方二維碼,后臺回復(fù):加群,即可申請入群。一定要備注:來源+研究方向+學(xué)校/公司,否則不拉入群中,見諒!

          長按三秒,進(jìn)入后臺


          推薦閱讀

          瀏覽 20
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  2020年香蕉在线视频观看拒绝收费 | 成人午夜剧场视频网站 | 乱伦大香蕉~ | 高清一区二区三区 | 青娱乐亚洲 |