亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python解析含有重復key的json方法

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

python自帶的json包能夠方便的解析json文本,但是如果json文本中包含重復key的時候,解析的結果就是錯誤的。如下為例

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

經過解析,結果卻如下所示:

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

原因是python解析的時候是創(chuàng)建一個字典,首先會讀取到key的值,但是后面遇到重復鍵的時候,后來的值會覆蓋原來的值,導致最后只有一個key的值留下來。

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

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

如何得到這種結果呢?python的json包還是留下了活路的。首先來看一下解析函數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這個參數,這是個回調函數,在解析json文本的時候會調用它并更改返回的結果。為了得到前述的結果,我們定義如下的hook函數:

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

在解析文本的時候將上述函數作為參數傳入,代碼如下所示:

json.loads(data, object_pairs_hook=my_obj_pairs_hook)

即可得到前述的相同鍵的值合并為數組的結果。

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

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

之所以參數是這個樣子,是因為這幾個鍵值對組成了一個字典,python使用默認的dict方法返回字典,自然會出現值覆蓋的情況。而有了my_obj_pairs_hook之后就調用這個函數得到字典結果,這樣我們就保證了鍵值的不丟失,最終得到我們希望的結果。如果是個更加復雜的json文本,則每次解析一個字典的時候都會調用這個函數,也會傳入不同的元組列表,大致如示例所示。

以上這篇python解析含有重復key的json方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python爬蟲學習之獲取指定網頁源碼

    Python爬蟲學習之獲取指定網頁源碼

    這篇文章主要為大家詳細介紹了Python爬蟲學習之獲取指定網頁源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 用Python實現斐波那契(Fibonacci)函數

    用Python實現斐波那契(Fibonacci)函數

    這篇文章主要介紹了用Python實現斐波那契(Fibonacci)函數的相關資料,需要的朋友可以參考下
    2016-03-03
  • np.ones的使用小結

    np.ones的使用小結

    本文主要介紹了np.ones的使用小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • python not運算符的實例用法

    python not運算符的實例用法

    在本篇文章里小編給大家整理了一篇關于python not運算符的實例用法,有需要的朋友們可以學習參考下。
    2021-06-06
  • python保存大型 .mat 數據文件報錯超出 IO 限制的操作

    python保存大型 .mat 數據文件報錯超出 IO 限制的操作

    這篇文章主要介紹了python保存大型 .mat 數據文件報錯超出 IO 限制的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • anaconda python3.8安裝后降級

    anaconda python3.8安裝后降級

    想給新的環(huán)境安裝pip install tensorflow,結果報錯了。網上了解可以降級為3.6,本文就詳細的介紹一下,感興趣的小伙伴們可以參考一下
    2021-06-06
  • python getopt模塊使用實例解析

    python getopt模塊使用實例解析

    這篇文章主要介紹了python getopt模塊使用實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 我的快遞一個月沒動靜于是趕緊上線python快遞查詢系統(tǒng)

    我的快遞一個月沒動靜于是趕緊上線python快遞查詢系統(tǒng)

    我的快遞在路上走了一個月還沒到,于是自己編寫快遞查詢,文中通過實例代碼截圖的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-09-09
  • matplotlib 畫動態(tài)圖以及plt.ion()和plt.ioff()的使用詳解

    matplotlib 畫動態(tài)圖以及plt.ion()和plt.ioff()的使用詳解

    這篇文章主要介紹了matplotlib 畫動態(tài)圖以及plt.ion()和plt.ioff()的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Pandas.DataFrame時間序列數據處理的實現

    Pandas.DataFrame時間序列數據處理的實現

    本文主要介紹了Pandas.DataFrame時間序列數據處理的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論