如何替换嵌套字典中所有出现的字符串?

我正在使用 Python3 并且我有一些像下面这样的字典:

{
  "test": "asdas",
  "value": "REPLACE_ME",
  "data": {
    "data1": [
      {
        "key1": "REPLACE_ME"
      },
      {
        "key2": "REPLACE_ME"
      },
      {
        "key3": "asdasda"
      }
    ],
    "data2": "REPLACE_ME",
    "data3": [
      "REPLACE_ME",
      "asdasdas",
      "asdasda"
    ]
  }
}

结构不一致。这意味着该结构可以不同并且REPLACE_ME可以在其他地方。我想遍历数据和替换REPLACE_MEREPLACED在所有地方。如果结构是一致的,我只会迭代字典并检查值是否是REPLACE_ME并替换它。但我不知道结构在哪里嵌套。给定一个字典(你不知道哪个,它可能有列表、嵌套字典或只是基本字段),你将如何在所有地方替换REPLACE_MEwith REPLACED

回答

嵌套数据结构中的深层替换是一个自然递归的问题,所以用递归函数来解决它是很自然的:

def replace_deep(data, a, b):
    if isinstance(data, str):
        return data.replace(a, b)
    elif isinstance(data, dict):
        return {k: replace_deep(v, a, b) for k, v in data.items()}
    elif isinstance(data, list):
        return [replace_deep(v, a, b) for v in data]
    else:
        # nothing to do?
        return data

我在这里假设你有类似 JSON 数据的东西,所以你想要递归嵌套字典和列表,并且不会有元组、集合或其他容器。如果有,您可以向函数添加额外的案例以满足您自己的需要。


以上是如何替换嵌套字典中所有出现的字符串?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>