如何替换嵌套字典中所有出现的字符串?
我正在使用 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在所有地方。如果结构是一致的,我只会迭代字典并检查值是否是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 数据的东西,所以你想要递归嵌套字典和列表,并且不会有元组、集合或其他容器。如果有,您可以向函数添加额外的案例以满足您自己的需要。