Python中如何替换字典值中的所有占位符实例?
解决Python字典/JSON中占位符替换的几种实用方法
方法一:递归遍历处理(支持嵌套结构)
这个方法能处理任意嵌套的字典、列表,同时兼顾字典的键和值里的占位符,是最通用的方案:
def replace_placeholders(obj, env): # 处理列表 if isinstance(obj, list): return [replace_placeholders(item, env) for item in obj] # 处理字典 elif isinstance(obj, dict): new_dict = {} for key, value in obj.items(): # 替换键里的占位符 new_key = key.replace("{env}", env) # 递归替换值里的占位符 new_dict[new_key] = replace_placeholders(value, env) return new_dict # 处理字符串 elif isinstance(obj, str): return obj.replace("{env}", env) # 其他类型(数字、布尔等)直接返回 else: return obj # 测试示例 my_dct = { "pipeline": "Test Pipeline", "environment": "dev", "test": { "{env}_test2": { "test3": ["{env}_test4", "{env}_test5"] } } } print(replace_placeholders(my_dct, "dev"))
运行后会得到预期结果,函数会递归遍历所有嵌套结构,不管是字典的键、字典的值还是列表元素,只要是字符串就替换占位符,其他类型原样保留。
方法二:读取JSON文件时直接替换(简单快速)
如果你的字典是从JSON文件读取的,可以先把文件内容读成字符串,批量替换占位符后再转成字典,步骤更简洁:
import json def load_json_with_replace(file_path, env): with open(file_path, 'r', encoding='utf-8') as f: # 先读成字符串替换占位符 json_str = f.read().replace("{env}", env) # 再转成字典 return json.loads(json_str) # 使用示例(假设你的JSON文件叫config.json) # result = load_json_with_replace("config.json", "dev") # print(result)
这个方法代码少、速度快,但要注意:如果JSON内容里有和占位符格式完全一样的普通字符串(比如某个值就是"{env}"),会被误替换,适合确定占位符只出现在需要替换位置的场景。
方法三:字符串格式化(仅适合值的替换,不支持键)
如果只有字典的值里有占位符,键里没有,还可以用字符串格式化的方式,仅作场景补充:
def format_dict_values(obj, env): if isinstance(obj, list): return [format_dict_values(item, env) for item in obj] elif isinstance(obj, dict): return {k: format_dict_values(v, env) for k, v in obj.items()} elif isinstance(obj, str): return obj.format(env=env) else: return obj
这个方法用str.format()规范替换,但缺点是处理不了字典键里的占位符,需根据场景选择。
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

