You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用format()格式化含嵌套结构的Python字典

解决字典嵌套结构的字符串格式化问题

你有如下嵌套结构的字典:

info={
    "name": "Naser",
    "key1": "Good morning {name}",
    "key2": "Good evening {name}",
    "key3": "Good night {name}",
    "list1":["word1","word2",{"user": "{name}"}],
}

尝试用以下代码循环格式化所有内容时:

for item in info:
    info[item].format(**info)

出现错误:AttributeError: 'list' object has no attribute 'format'

原代码仅能处理顶层字典的直接字符串值,遇到列表、嵌套字典这类复合结构就会报错。要实现全分支格式化,需要递归遍历所有层级的元素,根据元素类型做针对性处理:

解决方案:递归处理嵌套结构

方式1:生成格式化后的新结构

适合不想修改原字典的场景,递归遍历并返回新的格式化后数据:

def format_nested_structure(data, context):
    if isinstance(data, str):
        return data.format(**context)
    elif isinstance(data, list):
        return [format_nested_structure(item, context) for item in data]
    elif isinstance(data, dict):
        return {key: format_nested_structure(value, context) for key, value in data.items()}
    # 非字符串、列表、字典的类型直接返回原数据
    else:
        return data

# 生成格式化后的新字典
formatted_info = format_nested_structure(info, info)
print(formatted_info)

运行结果:

{
    "name": "Naser",
    "key1": "Good morning Naser",
    "key2": "Good evening Naser",
    "key3": "Good night Naser",
    "list1": ["word1", "word2", {"user": "Naser"}]
}

方式2:原地修改原结构

如果需要直接修改原字典,可调整函数为原地更新:

def format_nested_structure_inplace(data, context):
    if isinstance(data, str):
        return data.format(**context)
    elif isinstance(data, list):
        for i in range(len(data)):
            data[i] = format_nested_structure_inplace(data[i], context)
    elif isinstance(data, dict):
        for key in data:
            data[key] = format_nested_structure_inplace(data[key], context)
    return data

# 直接修改原字典
format_nested_structure_inplace(info, info)
print(info)

以上两种方式都能遍历处理所有层级的嵌套元素,完成所有{name}占位符的替换。

内容的提问来源于stack exchange,提问作者NaserOwaimer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:58:12