我有一个JSON文件,看起来像这样:
"153689763780624385": {
"1": {
"author": "Mike",
"date": "05/06/2022, 12:00:57"
},
"2": {
"author": "Mike",
"date": "05/06/2022, 13:29:43"
},
"3": {
"author": "Jan01p",
"date": "05/7/2022, 16:01:22"
}
}
我正在做的是访问我的JSON,并删除JSON文件中的第二个对象键。使用以下代码:
with open("pins.json", "r+") as f:
p = json.load(f)
gid = "153689763780624385"
del p[gid]["2"]
with open("pins.json", "w+") as fp:
json.dump(p, fp, indent=4)
现在我的JSON是这样的
"153689763780624385": {
"1": {
"author": "Mike",
"date": "05/06/2022, 12:00:57"
}
"3": {
"author": "Jan01p",
"date": "05/7/2022, 16:01:22"
}
}
我在这里的目标是使用某种循环来重命名下面所有的键,使其有序。把3
变成2
。将4
命名为3
,以此类推。JSON要大得多,只是为了方便查询而缩短了它。以递增顺序重命名键的好方法是什么?目前我想到的是字典。弹出一个for循环。但我想不明白。
您可以使用下面的逻辑重新排序所有的键。
my_dict1 = {"1": "a", "3": "b", "4": "c", "5": "d"}
my_dict2 = {str(i+1):v for i, v in enumerate(my_dict1.values())}
print(my_dict2)
# {'1': 'a', '2': 'b', '3': 'c', '4': 'd'}
此解决方案只能用于Python 3.7及更新版本,因为此版本之前的字典是无序的。如果你想让它们按日期排序。
假设您的键都是字符串形式的数字,并且您只想让它们休息1。使用dict.pop()
方法:
value_to_remove = 2
with open("pins.json", "r+") as f:
p = json.load(f)
gid = "153689763780624385"
del p[gid][str(value_to_remove)]
for key, values in p[gid].items():
if int(key) > value_to_remove:
p[gid][str(int(key)-1)] = p[gid].pop(str(key))
with open("pins.json", "w+") as fp:
json.dump(p, fp, indent=4)
如果保存在gid
中的键值是唯一需要删除的键值,则删除"2"
键。那就好了。如果你想为每一个'第一个键'实现这个,你可以遍历json字典中的每一个第一个键。