亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

python 從json數組中刪除多余的鍵值

python 從json數組中刪除多余的鍵值

蕪湖不蕪 2023-10-18 21:06:08
我有一個包含對象數組的 json 文件,文件內的數據如下所示:[ {‘name’: ‘A’, ‘address’: ‘some address related to A’, ‘details’: ‘some details related to A’}, {‘name’: ‘B’, ‘address’: ‘some address related to A’, ‘details’: ‘some details related to B’}, {‘name’: ‘C’, ‘address’: ‘some address related to A’, ‘details’: ‘some details related to C’}]我想刪除多余的鍵值,所以輸出應該是這樣的:  [   {‘name’: ‘A’,   ‘address’: ‘some address related to A’,   ‘details’: ‘some details related to A’},   {‘name’: ‘B’,   ‘details’: ‘some details related to B’},   {‘name’: ‘C’,   ‘details’: ‘some details related to C’}  ]所以,我嘗試過這段代碼,在此鏈接中找到了它:import jsonwith open(‘./myfile.json’) as fp:    data= fp.read()  unique = []for n in data:    if all(unique_data["address"] != data for unique_data["address"] in unique):        unique.append(n)#print(unique)   with open(“./cleanedRedundancy.json”, ‘w’) as f:     f.write(unique)但它給了我這個錯誤:TypeError: string indices must be integers
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

我做了有/沒有文件支持的解決方案,默認情況下沒有,對于您的情況,支持文件更改use_files = Falseuse_files = True我的腳本內部。

我預計您想要刪除具有相同(鍵,值)對的重復項。

在線嘗試一下!

import json


use_files = False

# Only duplicates with next keys will be deleted

only_keys = {'address', 'complex'}


if not use_files:

    fdata = """

    [

     {

       "name": "A",

       "address": "some address related to A",

       "details": "some details related to A"

     },

     {

       "name": "B",

       "address": "some address related to A",

       "details": "some details related to B",

       "complex": ["x", {"y": "z", "p": "q"}],

       "dont_remove": "test"

     },

     {

       "name": "C",

       "address": "some address related to A",

       "details": "some details related to C",

       "complex": ["x", {"p": "q", "y": "z"}],

       "dont_remove": "test"

     }

    ]

    """


if use_files:

    with open("./myfile.json", 'r', encoding = 'utf-8') as fp:

        data = fp.read()

else:

    data = fdata


entries = json.loads(data)


unique = set()

for e in entries:

    for k, v in list(e.items()):

        if k not in only_keys:

            continue

        v = json.dumps(v, sort_keys = True)

        if (k, v) in unique:

            del e[k]

        else:

            unique.add((k, v))


if use_files:

    with open("./cleanedRedundancy.json", "w", encoding = 'utf-8') as f:

        f.write(json.dumps(entries, indent = 4, ensure_ascii = False))

else:

    print(json.dumps(entries, indent = 4, ensure_ascii = False))

輸出:


[

    {

        "name": "A",

        "address": "some address related to A",

        "details": "some details related to A"

    },

    {

        "name": "B",

        "details": "some details related to B",

        "complex": [

            "x",

            {

                "y": "z",

                "p": "q"

            }

        ],

        "dont_remove": "test"

    },

    {

        "name": "C",

        "details": "some details related to C",

        "dont_remove": "test"

    }

]


查看完整回答
反對 回復 2023-10-18
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號