4 回答
TA贡献1859条经验 获得超6个赞
看起来您实际上想删除字典列表中的任何字典,"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
TA贡献1826条经验 获得超6个赞
删除“角色” - 一个班轮演示
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}]}
TA贡献1993条经验 获得超5个赞
使用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)
TA贡献1852条经验 获得超1个赞
for d in data["keys"]:
if(d["key"] == key):
del d
del删除名字。删除名称不会删除关联的值,除非它是该值的唯一名称。
该for d in ...循环创建为 的d附加名称data["keys"]["key"]。当您删除时del d,您只是删除了名称,而没有d删除其中的值。data
这相当于:
x = 1
y = x
del y
运行此代码后,x仍然存在。 del y刚刚删除了名字 y。
换句话说,想象一下贴在盒子上的便利贴。便利贴是名称,方框是值。一个盒子上可以贴有许多便条,移除一张便条并不会破坏盒子(除非它是唯一的便条)。
添加回答
举报