python - 如何删除 json 文件中的键及其嵌套键值对?
问题描述
我希望能够检查 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
}
}
这就是我尝试过但没有奏效的方法:
if name == child.text:
...
with open("streak.json", "r+") as f:
data = json.load(f)
for x in data:
if name in x:
del x[name]
with open("streak.json", "w") as file:
data = json.dump(data, file)
因此,例如,如果 name == "Two",那么所有 Two 的键值对都将被删除,包括 Two 本身。
解决方案
您可以使用该pop()
功能。此函数将从字典中删除键并返回值。如果该键不存在,它将返回一个默认值。例如:
>>> d = {'a': 1, 'b': 2}
>>> d.pop('a', None)
1
>>> d
{'b': 2}
>>> d.pop('c', None)
>>> d
{'b': 2}
>>>
这将减轻删除时检查密钥是否存在的负担,并且您不必依赖KeyError
检查它是否失败。您可以检查返回值是否不是您的哨兵值,None
在这种情况下,则密钥已成功删除。如果它是哨兵值,那么密钥永远不存在。
推荐阅读
- plsql - Regexp_like 不接受字符串作为列
- angular - firebase 性能和可扩展性
- raspbian - 如何在 Raspbian 10(buster)上从启动运行脚本?
- android - 使用调整大小和重新定位的选项覆盖图像(位图)
- python-3.x - 在 requests.put 中添加 headers 和 payload
- java - intelij 多模块 Maven 功能
- excel - 如何在单元格中搜索逗号并根据是否找到逗号执行两个操作之一?
- c# - 如何在 BOT v4 中向 MS 团队发送主动消息
- java - 调用从 Scala 接收可变数量参数的 Java 方法
- php - simpleXMLElement 自己删除编码