如何删除json文件中的键及其嵌套键-值对?

2024-05-19 20:27:47 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我想删除一个嵌套的json文件的话,我想把它删除。在

Json文件:

{
    "One": {
        "action": "One",
        "delay": 1559243024.3665395,
        "seconds": 0,
        "score": 0,
        "delta": 1559183024.3665395,
        "grace_sec": 60000
    },
    "Two": {
        "action": "Two",
        "delay": 1559321009.969849,
        "seconds": 0,
        "score": 14,
        "delta": 1559261009.969849,
        "grace_sec": 60000
    },
    "Three": {
        "action": "Three",
        "delay": 1559909745.5981774,
        "seconds": 0,
        "score": 0,
        "delta": 1559309745.5981774,
        "grace_sec": 600000
    },
    "Four": {
        "action": "Four",
        "delay": 1559909757.0363235,
        "seconds": 0,
        "score": 1,
        "delta": 1559309757.0363235,
        "grace_sec": 600000
    }
}

这就是我曾经尝试过但没有成功的原因:

^{pr2}$

例如,如果name==“Two”,那么Two的所有键值对都将被删除,包括Two本身。在


Tags: 文件json原因actionseconethreefour
3条回答

您只需要去掉for循环,因为它将迭代字典键。所以for x in data会给你'One''Two'等等,所以在匹配'Two'时,你会尝试del 'Two'['Two'],这是没有意义的。您只需使用in在字典中查找这些键

...
with open("streak.json", "r") as f:
    data = json.load(f)

    if name in data:
        del data[name]

只需删除顶层项目:

with open("streak.json", "r") as f:
    data = json.load(f)

if name in data:
    del data[name]

with open("streak.json", "w") as file:
    json.dump(data, file)

您可以使用^{}函数。此函数将从字典中删除键并返回值。如果键不存在,它将返回一个默认值。 例如:

>>> d = {'a': 1, 'b': 2}
>>> d.pop('a', None)
1
>>> d
{'b': 2}
>>> d.pop('c', None)
>>> d
{'b': 2}
>>>

这将减少在删除时检查密钥是否存在的负担,并且您不必依赖KeyError来检查它是否失败。 您可以检查返回值是否不是您的sentinel值,None在本例中,该密钥被成功删除。如果是sentinel值,那么密钥就不存在了。在

相关问题 更多 >