首页 > 解决方案 > 尝试从列表中的 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]]

标签: pythonjsonlistdictionary

解决方案


您可以使用循环而不是对所有嵌套索引进行硬编码。

obj = request_body[list_key][index_key_int]
for key in split_key[:-1]:
    obj = obj[key]
del obj[split_key[-1]]

for循环深入嵌套字典。然后它使用最终键删除元素。


推荐阅读