欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用yield壓平嵌套字典的超簡(jiǎn)單方法

 更新時(shí)間:2019年11月02日 16:32:47   作者:青南  
這篇文章主要給大家介紹了關(guān)于python使用yield壓平嵌套字典的超簡(jiǎn)單方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

我們經(jīng)常遇到各種字典套字典的數(shù)據(jù),例如:

nest_dict = {
  'a': 1,
  'b': {
    'c': 2,
    'd': 3,
    'e': {'f': 4}
  },
  'g': {'h': 5},
  'i': 6,
  'j': {'k': {'l': {'m': 8}}}
}

有沒(méi)有什么簡(jiǎn)單的辦法,把它壓扁,變成:

{
  'a': 1,
  'b_c': 2,
  'b_d': 3,
  'b_e_f': 4,
  'g_h': 5,
  'i': 6,
  'j_k_l_m': 8
}

你肯定想到了使用遞歸來(lái)解決這個(gè)問(wèn)題,那么你可以試一試,看看你的遞歸函數(shù)有多少行代碼。

今天,我們使用yield關(guān)鍵字來(lái)實(shí)現(xiàn)這個(gè)需求,在不炫技的情況下,只需要8行代碼。在炫技的情況下,只需要3行代碼。

要快速地把這個(gè)嵌套字典壓扁,我們需要從下網(wǎng)上來(lái)處理字段。例如對(duì)于b->e->f->4這條路徑,我們首先把最里面的{'f': 4}轉(zhuǎn)換為一個(gè)元組('f', 4)。然后,把這個(gè)元組向上拋出,于是得到了元組('e', ('f', 4))。我們把 e拼接到f的前面,變?yōu)椋?'e_f', 4),繼續(xù)往上拋出,得到('b', ('e_f', 4))。再把b拼接到e_f上面,得到('b_e_f', 4)。完成一條線路的組裝。

這個(gè)邏輯如果使用yield關(guān)鍵字來(lái)實(shí)現(xiàn),就是:

def flat(x):
  for key, value in x.items():
    if isinstance(value, dict):
      for k, v in flat(value):
        k = f'{key}_{k}'
        yield (k, v)
    else:
      yield (key, value)

運(yùn)行結(jié)果如下圖所示:

通過(guò)使用 yield關(guān)鍵字,字典的key會(huì)像是在流水線上一樣,一層一層從內(nèi)向外進(jìn)行組裝,從而形成完整的路徑。

在下一篇文章中,我們繼續(xù)使用yield關(guān)鍵字來(lái)解決字典與列表混合嵌套的情況。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • python調(diào)用fortran模塊

    python調(diào)用fortran模塊

    本文給大家介紹的是在Python中調(diào)用fortran代碼,主要是用到了f2py這個(gè)程序,十分的實(shí)用,有需要的小伙伴可以參考下
    2016-04-04
  • Python實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊游戲

    Python實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊游戲

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單的俄羅斯方塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • pandas篩選數(shù)值列和非數(shù)值列方式

    pandas篩選數(shù)值列和非數(shù)值列方式

    這篇文章主要介紹了pandas篩選數(shù)值列和非數(shù)值列方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python matplotlib工具欄源碼探析三之添加、刪除自定義工具項(xiàng)的案例詳解

    python matplotlib工具欄源碼探析三之添加、刪除自定義工具項(xiàng)的案例詳解

    這篇文章主要介紹了python matplotlib工具欄源碼探析三之添加、刪除自定義工具項(xiàng)的案例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • django 獲取字段最大值,最新的記錄操作

    django 獲取字段最大值,最新的記錄操作

    這篇文章主要介紹了django 獲取字段最大值,最新的記錄操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Python調(diào)用REST API接口的幾種方式匯總

    Python調(diào)用REST API接口的幾種方式匯總

    這篇文章主要介紹了Python調(diào)用REST API接口的幾種方式匯總,幫助大家更好的利用python進(jìn)行自動(dòng)化運(yùn)維,感興趣的朋友可以了解下
    2020-10-10
  • matplotlib繪制折線圖的基本配置(萬(wàn)能模板案例)

    matplotlib繪制折線圖的基本配置(萬(wàn)能模板案例)

    折線圖可以很方便的看出數(shù)據(jù)的對(duì)比,本文主要介紹了matplotlib繪制折線圖的基本配置(萬(wàn)能模板案例),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • next在python中返回迭代器的實(shí)例方法

    next在python中返回迭代器的實(shí)例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于next在python中返回迭代器的實(shí)例方法,有興趣的朋友們可以嘗試下。
    2020-12-12
  • Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)定時(shí)精度可調(diào)節(jié)的定時(shí)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 詳解如何用Python實(shí)現(xiàn)感知器算法

    詳解如何用Python實(shí)現(xiàn)感知器算法

    今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著如何用Python實(shí)現(xiàn)感知器算法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06

最新評(píng)論