重命名 python 中递增的 JSON 个对象
Rename incrementing JSON objects in python
我有一个 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 循环中的 dict.pop 。但是想不通。
假设你的键都是字符串形式的数字,你只想让它们休息 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"
键。然后就可以了。如果你想为每个 'first key' 实现这个,你可以迭代 json 字典中的每个第一个键。
您可以使用以下逻辑对所有键重新排序。
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 及更新版本,因为此版本之前的词典是无序的。 如果您想按日期排序。
我有一个 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 循环中的 dict.pop 。但是想不通。
假设你的键都是字符串形式的数字,你只想让它们休息 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"
键。然后就可以了。如果你想为每个 'first key' 实现这个,你可以迭代 json 字典中的每个第一个键。
您可以使用以下逻辑对所有键重新排序。
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 及更新版本,因为此版本之前的词典是无序的。 如果您想按日期排序。