Python 从 json 字典中删除不起作用

当我调用此函数从 json 导入的字典中删除项目时,它不起作用


def removeKey(key):

    with open ("keys.json") as f:

        data  = json.loads(f.read())

        for d in data["keys"]:

            if(d["key"] == key):

                del d


    print(data)


    with open ("keys.json", "w") as f:

        json.dump(data, f)

这就是 JSON 中字典的设置方式


{"keys": [

    {"key": 1599853953652, "role": "MODERATOR", "Server": 753230650181550141, "uses": 1, "maxuses": 0}

    ]

}


慕森卡
浏览 163回答 4
4回答

BIG阳

看起来您实际上想删除字典列表中的任何字典,"keys"如果它们的条目值"key"与某个数字匹配(例如1599853953652)。假设是这种情况,最干净的方法实际上是创建一个新列表来过滤掉不需要的条目;您不能del在迭代时简单地调用来删除元素。data = json.loads(f.read())filtered_keys = [d for d in data["keys"] if d["key"] != key]data["keys"] = filtered_keys

跃然一笑

删除“角色” - 一个班轮演示data = {"keys": [    {"key": 1599853953652, "role": "MODERATOR", "Server": 753230650181550141, "uses": 1, "maxuses": 0}    ]}data['keys'][0].pop('role',None)print(data)输出{'keys': [{'key': 1599853953652, 'Server': 753230650181550141, 'uses': 1, 'maxuses': 0}]}

ibeautiful

使用del d仅删除变量d,但不会影响要从中删除的列表。您需要对列表本身进行操作。我会使用该pop()方法,尽管del也可以。def removeKey(key):    with open ("keys.json") as f:        data = json.loads(f.read())        for i, d in enumerate(data["keys"]):            if d["key"] == key:                data["keys"].pop(i)    print(data)    with open ("keys.json", "w") as f:        json.dump(data, f)

小怪兽爱吃肉

for d in data["keys"]:    if(d["key"] == key):        del ddel删除名字。删除名称不会删除关联的值,除非它是该值的唯一名称。该for d in ...循环创建为 的d附加名称data["keys"]["key"]。当您删除时del d,您只是删除了名称,而没有d删除其中的值。data这相当于:x = 1y = xdel y运行此代码后,x仍然存在。 del y刚刚删除了名字 y。换句话说,想象一下贴在盒子上的便利贴。便利贴是名称,方框是值。一个盒子上可以贴有许多便条,移除一张便条并不会破坏盒子(除非它是唯一的便条)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python