python - 如何替换嵌套字典中所有出现的字符串?
问题描述
我正在使用 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
解决方案
替换嵌套数据结构的深处是一个自然递归的问题,因此很自然地用递归函数来解决它:
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 数据的东西,所以你想递归嵌套字典和列表,并且不会有元组、集合或其他容器。如果有,您可以在函数中添加额外的案例以满足您自己的需要。
推荐阅读
- python - mac:尝试使用 pip 安装 mssql-cli 失败并出现语法错误
- conv-neural-network - 针对特定全连接 nn 或 CNN 的 ASIC 设计
- matplotlib - 如何使用 matplotlib 为一系列 Seaborn 热图制作动画并导出为 mp4 文件?
- java - 如何解释输出?Java ,Collator-CollationKey-toByteArray()
- mysql - 如何在 SQL 中找到前一个(倒数第二个)值?
- swift - Firestore 的 Swift MVC 模型(学习 MVC 模型)
- optimization - 如何克服粒子群优化(PSO)中的收敛问题?
- r - 将差异分配给Julia中的向量时出错
- visual-studio-code - 有没有办法配置 VSCode 将函数和常量重构到文件底部以外的任何地方?
- json - Flutter中从api获取数据时出错