python - 尝试从列表中的 JSON 中删除键/值对
问题描述
def loop_through_list_keys_and_update_or_delete(body_dict, list_key, key_to_manipulate, update_or_delete):
request_body = body_dict
try:
for keys in request_body[list_key]:
for key, value in keys.items():
if key == key_to_manipulate:
if update_or_delete == 'delete':
del request_body[key]
大家好!对 Python 比较陌生,所以请保持温柔,我非常感谢您的帮助!附图中是我的运行时间值。基本上我想做的是删除一个特定的(但会改变的)键/值对。request_body 是我读过的 json。
我在列表'fxTransactions'上循环,它得到的唯一键是financialTransaction 和transactionRefId。在这种情况下,我需要访问 FinancialTransaction 中的 request_body[fxTransactions][0][financialTransaction][rule] 字段并删除它及其值。但是我不能将它作为变量发送到删除,因为您不能将列表名称与变量中的键结合起来。我似乎无法弄清楚如何到达该字段并将其删除。请注意,要删除的字段/值对是动态的,因此我并不总是知道要删除哪一个(可能是债务人、债权人等)。如果可能的话,我还想将此代码用于其他列表,因此尽量不要硬编码。但如果没有其他办法,我可以。
先感谢您!
这是可以做我想做的事情的代码,但我正在尝试想出一种方法来使它更清洁和可重用:
index_key_int = int(index_key)
split_key = key.split(".")
keys_numb = len(split_key)
if keys_numb == 5:
del request_body[list_key][index_key_int][split_key[0]][split_key[1]][split_key[2]][split_key[3]][
split_key[4]]
if keys_numb == 4:
del request_body[list_key][index_key_int][split_key[0]][split_key[1]][split_key[2]][split_key[3]]
if keys_numb == 3:
del request_body[list_key][index_key_int][split_key[0]][split_key[1]][split_key[2]]
elif keys_numb == 2:
del request_body[list_key][index_key_int][split_key[0]][split_key[1]]
elif keys_numb == 1:
del request_body[list_key][index_key_int][split_key[0]]
解决方案
您可以使用循环而不是对所有嵌套索引进行硬编码。
obj = request_body[list_key][index_key_int]
for key in split_key[:-1]:
obj = obj[key]
del obj[split_key[-1]]
for
循环深入嵌套字典。然后它使用最终键删除元素。
推荐阅读
- python - TF 2.0 W 操作已更改...当禁用急切模式并使用回调时
- javascript - 将动态数据设置为径向量规
- visual-studio-code - 更新到 catlina 和 mojave 后,流服务器和 vscode 流扩展中断
- graph-databases - 如何确保我的数据导入 Nebula Graph 成功?
- javascript - NextJS 中动态路由的命名页面
- docker - 如何在 IBM Cloud Kubernetes 服务上部署 https://github.com/docker/compose-on-kubernetes?
- r - 如何根据 R 中的另一个现有表得出百分位数
- php - 在 Symfony 4 中为 ORM 实体动态设置模式
- android - 电容器 - 为 cors 设置原点
- dask - 使用 C 指针时的 Dask 与多处理