4 回答

TA貢獻1859條經(jīng)驗 獲得超6個贊
看起來您實際上想刪除字典列表中的任何字典,"keys"如果它們的條目值"key"與某個數(shù)字匹配(例如1599853953652)。
假設(shè)是這種情況,最干凈的方法實際上是創(chuàng)建一個新列表來過濾掉不需要的條目;您不能del在迭代時簡單地調(diào)用來刪除元素。
data = json.loads(f.read())
filtered_keys = [d for d in data["keys"] if d["key"] != key]
data["keys"] = filtered_keys

TA貢獻1826條經(jīng)驗 獲得超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條經(jīng)驗 獲得超6個贊
使用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條經(jīng)驗 獲得超1個贊
for d in data["keys"]:
if(d["key"] == key):
del d
del刪除名字。刪除名稱不會刪除關(guān)聯(lián)的值,除非它是該值的唯一名稱。
該for d in ...循環(huán)創(chuàng)建為 的d附加名稱data["keys"]["key"]。當(dāng)您刪除時del d,您只是刪除了名稱,而沒有d刪除其中的值。data
這相當(dāng)于:
x = 1
y = x
del y
運行此代碼后,x仍然存在。 del y剛剛刪除了名字 y。
換句話說,想象一下貼在盒子上的便利貼。便利貼是名稱,方框是值。一個盒子上可以貼有許多便條,移除一張便條并不會破壞盒子(除非它是唯一的便條)。
添加回答
舉報