首页 > 解决方案 > 如何替换嵌套字典中所有出现的字符串?

问题描述

我正在使用 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_ME为。REPLACED如果结构是一致的,我只会遍历 dict 并检查值是否是REPLACE_ME并替换它。但我不知道结构在哪里嵌套。给定一个 dict(你不知道是哪个,它可能有列表、嵌套的 dicts 或只是基本字段),你将如何在所有地方REPLACE_ME替换?REPLACED

标签: python

解决方案


替换嵌套数据结构的深处是一个自然递归的问题,因此很自然地用递归函数来解决它:

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 数据的东西,所以你想递归嵌套字典和列表,并且不会有元组、集合或其他容器。如果有,您可以在函数中添加额外的案例以满足您自己的需要。


推荐阅读