Python中替换嵌套字典结构内所有指定字符串的最优实现方法
最优实现方案:递归遍历通用处理
你可以写一个通用的递归处理函数,自动适配任意嵌套深度的字典、列表结构,后续不管你的数据结构怎么扩展,都不需要修改处理逻辑:
def replace_all_tokens(obj, my_token): # 处理字符串类型,直接替换token if isinstance(obj, str): return obj.replace("<<TOKEN>>", my_token) # 处理列表,递归遍历每个元素 elif isinstance(obj, list): return [replace_all_tokens(item, my_token) for item in obj] # 处理字典,递归遍历每个值 elif isinstance(obj, dict): return {key: replace_all_tokens(value, my_token) for key, value in obj.items()} # 其他类型(数字、布尔值、None等)直接返回原值 else: return obj
使用方式
拿到数据库返回的原始数据后直接调用即可:
# 假设raw_data是你从数据库拿到的原始结构 raw_data = { "field":"Somestring/somestring.jpg?<<TOKEN>>", "list": [ {"field": "sometring.html?<<TOKEN>>"}, {"field2": "otherstring.mp4?<<TOKEN>>"} ] } my_token = "实际的访问验证token" processed_data = replace_all_tokens(raw_data, my_token)
方案优势
- 无需手动遍历每个字段,适配任意层级的嵌套结构,后续结构扩展不需要改代码
- 自动跳过非字符串类型,不会出现类型报错
- 性能和手动遍历基本一致,中小数据量下无额外损耗
可选简化方案(有限场景适用)
如果能确定你的数据结构所有内容都是JSON可序列化的(没有datetime、自定义类实例等类型),也可以用JSON序列化+替换的快速写法:
import json processed_data = json.loads(json.dumps(raw_data).replace("<<TOKEN>>", my_token))
注意:该方案仅适用于纯JSON兼容结构的场景,存在非序列化类型时会报错,优先推荐递归方案。
内容的提问来源于stack exchange,提问作者Markus B
相关产品推荐
相关产品推荐

