Python 字符串 format_map() 方法

Python format_map() 语法

format_map() 是 Python 字符串的一个方法,它通过字典的方式来格式化当前字符串。

语法:

str.format_map(mapping)

说明:

format_map() 方法接收单个参数。

  • mapping(必选):是一个实现 __getitem__() 方法的对象(比如字典、collections.defaultdict)。键名需要与字符串中的占位符匹配。

format_map() 不会修改原字符串,而是返回替换后的新字符串。如果占位符在映射中没有对应键,则会抛出 KeyError 异常。

Python format_map() 摘要

使用频率
修改原字符串
官方文档 查看
相关方法 format()

Python format_map() 示例

接下来,我们通过几个简单的例子来讲解 Python format_map() 方法是如何使用的。

示例 1:format_map() 基本用法

mapping = {'name': 'Jack', 'age': 20}
result = '{name} is {age} years old'.format_map(mapping)
print(result)

运行结果如下。

Jack is 20 years old

分析:

对于这个例子来说,{name} 会替换成 'name' 这个键对应的值(即 'Jack'),而 {age} 会替换成 'age' 这个键对应的值(即 20)。

示例 2:使用 defaultdict 避免 KeyError 异常

from collections import defaultdict

data = defaultdict(str, name='Jack') 
result = '{name} is {age} years old'.format_map(data)
print(result)

运行结果如下。

Jack is  years old

分析:

我们可以使用 defaultdict 来设置默认值,这样可以避免因缺失键(如 age)而导致报错。

示例 3:结合类属性动态生成映射

class User:
    def __init__(self, name, role):
        self.name = name
        self.role = role

    def __getitem__(self, key):
        return getattr(self, key, 'N/A')     # 如果缺失属性,则返回 'N/A'

user = User('Jack', 'Admin')
result = 'User: {name}, Role: {role} (Status: {status})'.format_map(user)
print(result)

运行结果如下。

User: Jack, Role: Admin (Status: N/A)

分析:

在上面例子中,我们通过自行实现 __getitem__() 方法,从而使得类实例作为映射参数,这样可以灵活处理未定义的属性。

format() 与 format_map() 对比

format() 和 format_map() 这 2 个方法看着相似,但它们存在本质上的区别。

  • format(**dict):需要显式解包字典,比如:'{name}'.format(**data)。
  • format_map(dict):直接传入映射对象,语法更简洁,支持动态映射类型。

上一篇: format()

下一篇: encode()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号