如何在嵌套字典中删除键及其所有值,然后像以前一样"0"、"1"、"2"、"3"顺序更改和排列键



我希望你们都做得很好。我在从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}

相关内容

最新更新