我希望你们都做得很好。我在从json文件中删除字典时遇到问题:
我有一个users.json,它有这样的数据:
{
"0": {
"course": "fjjc",
"password": "fhjf",
"username": "1800101253"
},
"1": {
"course": "fjjc",
"password": "fhjf",
"username": "1800101254"
},
"2": {
"course": "fjjc",
"password": "fhjf",
"username": "1800101257"
},
"3": {
"course": "fjjc",
"password": "fhjf",
"username": "1800101258"
},
"Total": 4
}
我试图删除任何带有所有嵌套数据的键,例如";0";键,然后按顺序排列json文件;0"1〃"2〃"3〃;他们的嵌套字典。因此,如果";0";键被移除,输出应该是这样的:
{
"0": {
"course": "fjjc",
"password": "fhjf",
"username": "1800101254"
},
"1": {
"course": "fjjc",
"password": "fhjf",
"username": "1800101257"
},
"2": {
"course": "fjjc",
"password": "fhjf",
"username": "1800101258"
},
"Total": 3
}
检查";1〃;关键数据到达";0";对所有人来说都是相似的。我很清楚键值不会改变,但我相信这个问题有解决方案。所以请帮帮我:(
我能够移除";0";键及其嵌套字典,但从未能够像以前那样用排序顺序的键实现json。
我的测试代码:
with open("users.json") as jsonFile3: #Reading users details into users.json
users = json.load(jsonFile3)
total = users["Total"]
for i in range(total):
if users[f"{i}"]["username"] == f"{username}":
del users[f"{i}"]
pos=i
removed = True
if removed == True:
for i in range(pos,total):
if f"{i}" in users:
if i==0:
continue
else:
users[f"{key-1}"] = users.pop(f"{key}")
users["Total"] = total-1
with open("users.json",'w') as jsonFile4:
json.dump(users,jsonFile4, indent=4, sort_keys=True)
您可以临时将字典转换为列表,删除特定索引处的项,然后按正确顺序重新创建字典。例如:
dct = {
"0": {"course": "fjjc", "password": "fhjf", "username": "1800101253"},
"1": {"course": "fjjc", "password": "fhjf", "username": "1800101254"},
"2": {"course": "fjjc", "password": "fhjf", "username": "1800101257"},
"3": {"course": "fjjc", "password": "fhjf", "username": "1800101258"},
"Total": 4,
}
to_remove = 0
lst = [dct[str(v)] for v in range(dct["Total"])]
lst.pop(to_remove)
dct = {str(i): v for i, v in enumerate(lst)}
dct["Total"] = len(lst)
print(dct)
打印:
{'0': {'course': 'fjjc', 'password': 'fhjf', 'username': '1800101254'},
'1': {'course': 'fjjc', 'password': 'fhjf', 'username': '1800101257'},
'2': {'course': 'fjjc', 'password': 'fhjf', 'username': '1800101258'},
'Total': 3}