Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从JSON文件中删除项目_Python_Json - Fatal编程技术网

Python 从JSON文件中删除项目

Python 从JSON文件中删除项目,python,json,Python,Json,我有一个包含大写字母和国家的JSON文件。如何删除特定的键值对 我有以下JSON文件 { "data": [ { "Capital": "Berlin", "Country": "Germany" }, { "Capital": "New Delhi", "Country": "India" }, { "Capital": "Canberra", "Co

我有一个包含大写字母和国家的JSON文件。如何删除特定的键值对

我有以下JSON文件

{
    "data": [
    {
        "Capital": "Berlin",
        "Country": "Germany"
    },
    {
        "Capital": "New Delhi",
        "Country": "India"
    },
    {
        "Capital": "Canberra",
        "Country": "Australia"
    },
    {
        "Capital": "Beijing.",
        "Country": "China"
    },
    {
        "Capital": "Tokyo",
        "Country": "Japan"
    }
    ]

}
我想删除一个项目

 {
    "Capital": "Canberra",
    "Country": "Australia"
 }
我该怎么做?我已经尝试过我自己的方法,但没有成功

with open(filename) as json_data:
        nations = json.load(json_data)['data']
        for x in nations:
            if x['Capital'] == "Canberra":
                del x['Capital']

那么如何删除该项呢?

我建议您使用列表理解重新构建JSON

nations = json.load(json_data)['data']
nations_new = [x for x in nations if x['Capital'] != "Canberra"]
如果您有多个过滤器,请创建一组过滤器:

filters = {'Canberra', 'Mexico City', ...}
nations_new = [x for x in nations if x['Capital'] not in filters]
最后,保存过滤后的数据:

with open(filename, 'w') as json_data:
    json.dump(nations_new, json_data)

@COLDSPEED嘿,那太好了!但我只发布了一个JSON文件,实际上我有多个JSON文件,在每个文件中,我想删除一个特定的项目。所以我不认为每次重新创建JSON都是一个好主意。@SouvikRay这比你想象的要便宜,因为你只移动引用。很遗憾,您无法在循环中删除。@COLDSPEED嘿,还有一个问题。如果我确实想保留原始JSON格式({“数据”:[…]),因为此方法在不保留原始结构的情况下重新创建文件,我该怎么办?@SouvikRay
{data':nations_new}
@COLDSPEED ok明白了!