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

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方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Pandas實現列(column)排序的幾種方法

    Pandas實現列(column)排序的幾種方法

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

    淺談Python的元編程

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

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

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

    python 兩個一樣的字符串用==結果為false問題的解決

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

    在Python下嘗試多線程編程

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

    TensorBoard 計算圖的查看方式

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

    Python實現統(tǒng)計代碼行的方法分析

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

    Python實現exe小工具的詳細代碼

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

    python 實現按對象傳值

    今天小編就為大家分享一篇python 實現按對象傳值,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python實現用于測試網站訪問速率的方法

    python實現用于測試網站訪問速率的方法

    這篇文章主要介紹了python實現用于測試網站訪問速率的方法,涉及Python中urllib2模塊及時間的相關操作技巧,需要的朋友可以參考下
    2015-05-05

最新評論

富平县| 焦作市| 印江| 忻城县| 北碚区| 卢湾区| 濉溪县| 五原县| 泽普县| 金沙县| 汪清县| 板桥市| 于田县| 临沂市| 青神县| 天长市| 普洱| 云梦县| 城口县| 灵丘县| 丰宁| 瓮安县| 平定县| 永德县| 双城市| 科技| 水城县| 南召县| 楚雄市| 尉犁县| 红桥区| 太谷县| 思南县| 广汉市| 洮南市| 景德镇市| 乌鲁木齐县| 柳河县| 南平市| 南丰县| 长泰县|