首页 > 解决方案 > 使用python删除嵌套字典中的键及其值

问题描述

寻找一个通用的解决方案,我可以从 dict 中删除特定的键及其值。例如,如果dict包含以下嵌套键值对:

data={

  "set": {
  "type": "object", #<-- should remove this key:value pair
  "properties": {
    "action": {
      "type": "string",  #<-- should NOT remove this key:value pair
      "description": "My settings"
    },
    "settings": {
      "type": "object", #<-- should remove this key:value pair
      "description": "for settings",
      "properties": {
        "temperature": {
          "type": "object", #<-- should remove this key:value pair
          "description": "temperature in degree C",
          "properties": {
            "heater": {
              "type": "object", #<-- should remove this key:value pair
              "properties": {
                "setpoint": {
                  "type": "number"
                },
              },
              "additionalProperties": false
            },

          },
          "additionalProperties": false
        },

      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
}

我想要一个输出字典,而不会"type":"object"出现这个键:值对。预期的输出应该产生没有"type":"object"

标签: pythondictionaryrecursionnested

解决方案


您可以编写一个递归函数:

def remove_a_key(d, remove_key):
    if isinstance(d, dict):
        for key in list(d.keys()):
            if key == remove_key:
                del d[key]
            else:
                remove_a_key(d[key], remove_key)

并将其称为:

remove_a_key(data, 'type')

这递归地从每个嵌套字典中删除'type'键和它的值,无论它有多深。


推荐阅读