最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python解析含有重復(fù)key的json方法

 更新時(shí)間:2019年01月22日 08:49:24   作者:dahlwuyn  
今天小編就為大家分享一篇python解析含有重復(fù)key的json方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

python自帶的json包能夠方便的解析json文本,但是如果json文本中包含重復(fù)key的時(shí)候,解析的結(jié)果就是錯(cuò)誤的。如下為例

 {"key":"1", "key":"2", "key":"3", "key2":"4"}

經(jīng)過(guò)解析,結(jié)果卻如下所示:

{
  "key":"3",
  "key2":"4"
}

原因是python解析的時(shí)候是創(chuàng)建一個(gè)字典,首先會(huì)讀取到key的值,但是后面遇到重復(fù)鍵的時(shí)候,后來(lái)的值會(huì)覆蓋原來(lái)的值,導(dǎo)致最后只有一個(gè)key的值留下來(lái)。

這肯定不是我們想要的結(jié)果,其中一種結(jié)果可以是將相同鍵的值聚合成一個(gè)數(shù)組,即如下所示。

{
  "key":["1","2","3"],
  "key2":"4"
}

如何得到這種結(jié)果呢?python的json包還是留下了活路的。首先來(lái)看一下解析函數(shù)loads的原型。

json.loads(s, encoding=None, cls=None, 
    object_hook=None, parse_float=None, 
    parse_int=None, parse_constant=None, 
    object_pairs_hook=None, **kw)

要注意的是object_pairs_hook這個(gè)參數(shù),這是個(gè)回調(diào)函數(shù),在解析json文本的時(shí)候會(huì)調(diào)用它并更改返回的結(jié)果。為了得到前述的結(jié)果,我們定義如下的hook函數(shù):

def my_obj_pairs_hook(lst):
  result={}
  count={}
  for key,val in lst:
    if key in count:count[key]=1+count[key]
    else:count[key]=1
    if key in result:
      if count[key] > 2:
        result[key].append(val)
      else:
        result[key]=[result[key], val]
    else:
      result[key]=val
  return result

在解析文本的時(shí)候?qū)⑸鲜龊瘮?shù)作為參數(shù)傳入,代碼如下所示:

json.loads(data, object_pairs_hook=my_obj_pairs_hook)

即可得到前述的相同鍵的值合并為數(shù)組的結(jié)果。

在這個(gè)示例中,傳入my_obj_pairs_hook的參數(shù)是一個(gè)元組列表,大致如下所示:

[("key","1"),("key","2"),("key","3"),("key2","4")]

之所以參數(shù)是這個(gè)樣子,是因?yàn)檫@幾個(gè)鍵值對(duì)組成了一個(gè)字典,python使用默認(rèn)的dict方法返回字典,自然會(huì)出現(xiàn)值覆蓋的情況。而有了my_obj_pairs_hook之后就調(diào)用這個(gè)函數(shù)得到字典結(jié)果,這樣我們就保證了鍵值的不丟失,最終得到我們希望的結(jié)果。如果是個(gè)更加復(fù)雜的json文本,則每次解析一個(gè)字典的時(shí)候都會(huì)調(diào)用這個(gè)函數(shù),也會(huì)傳入不同的元組列表,大致如示例所示。

以上這篇python解析含有重復(fù)key的json方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Pandas實(shí)現(xiàn)列(column)排序的幾種方法

    Pandas實(shí)現(xiàn)列(column)排序的幾種方法

    Pandas是一種高效的數(shù)據(jù)處理庫(kù),在數(shù)據(jù)處理過(guò)程中,咱們經(jīng)常需要將列按照一定的要求進(jìn)行排序,本文就來(lái)介紹一下Pandas實(shí)現(xiàn)列(column)排序的幾種方法,感興趣的可以了解一下
    2023-11-11
  • 淺談Python的元編程

    淺談Python的元編程

    提到元這個(gè)字,你也許會(huì)想到元數(shù)據(jù),元數(shù)據(jù)就是描述數(shù)據(jù)本身的數(shù)據(jù),元類就是類的類,本文的主要目的是向大家介紹這些元編程技術(shù),并且給出實(shí)例來(lái)演示它們是怎樣定制化源代碼的行為。剛興趣的朋友可以參考一下
    2021-09-09
  • python分布式環(huán)境下的限流器的示例

    python分布式環(huán)境下的限流器的示例

    本篇文章主要介紹了python分布式環(huán)境下的限流器的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • python 兩個(gè)一樣的字符串用==結(jié)果為false問(wèn)題的解決

    python 兩個(gè)一樣的字符串用==結(jié)果為false問(wèn)題的解決

    這篇文章主要介紹了python 兩個(gè)一樣的字符串用==結(jié)果為false問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 在Python下嘗試多線程編程

    在Python下嘗試多線程編程

    這篇文章主要介紹了在Python下多線程編程的嘗試,由于GIL的存在,多線程在Python開(kāi)發(fā)領(lǐng)域一直是個(gè)熱門問(wèn)題,需要的朋友可以參考下
    2015-04-04
  • TensorBoard 計(jì)算圖的查看方式

    TensorBoard 計(jì)算圖的查看方式

    今天小編就為大家分享一篇TensorBoard 計(jì)算圖的查看方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法分析

    Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法分析

    這篇文章主要介紹了Python實(shí)現(xiàn)統(tǒng)計(jì)代碼行的方法,結(jié)合實(shí)例形式分析了Python針對(duì)代碼行數(shù)的計(jì)算實(shí)現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2017-07-07
  • Python實(shí)現(xiàn)exe小工具的詳細(xì)代碼

    Python實(shí)現(xiàn)exe小工具的詳細(xì)代碼

    Python exe工具是一種將Python代碼打包成可執(zhí)行文件的工具,它可以將Python程序轉(zhuǎn)換為獨(dú)立的可執(zhí)行文件,使得在沒(méi)有安裝Python解釋器的環(huán)境中也能夠運(yùn)行Python程序,本文給大家介紹了Python實(shí)現(xiàn)exe小工具的詳細(xì)代碼,需要的朋友可以參考下
    2024-04-04
  • python 實(shí)現(xiàn)按對(duì)象傳值

    python 實(shí)現(xiàn)按對(duì)象傳值

    今天小編就為大家分享一篇python 實(shí)現(xiàn)按對(duì)象傳值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python實(shí)現(xiàn)用于測(cè)試網(wǎng)站訪問(wèn)速率的方法

    python實(shí)現(xiàn)用于測(cè)試網(wǎng)站訪問(wèn)速率的方法

    這篇文章主要介紹了python實(shí)現(xiàn)用于測(cè)試網(wǎng)站訪問(wèn)速率的方法,涉及Python中urllib2模塊及時(shí)間的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

盘山县| 福建省| 安平县| 朔州市| 乌兰察布市| 额尔古纳市| 阿拉善左旗| 望都县| 桃江县| 响水县| 南华县| 呼玛县| 南丰县| 九寨沟县| 鄂尔多斯市| 务川| 安康市| 阿合奇县| 临湘市| 浏阳市| 阿拉善右旗| 宜城市| 东港市| 娱乐| 准格尔旗| 苍山县| 皋兰县| 任丘市| 格尔木市| 房产| 永兴县| 永城市| 隆安县| 沂源县| 哈巴河县| 酒泉市| 精河县| 宁强县| 桦川县| 绥德县| 翁牛特旗|