gpt4 book ai didi

python - 如果未在 str.format 中传递,则将值留空

转载 作者:IT老高 更新时间:2023-10-28 20:46:28 24 4
gpt4 key购买 nike

我遇到了一个相当简单的问题,我无法想出一个优雅的解决方案。

我在一个函数中使用 str.format 创建一个字符串,该函数在 dict 中传递以用于格式。我想创建字符串并在它们被传递时使用值对其进行格式化,否则将它们留空。

kwargs = {"name": "mark"}
"My name is {name} and I'm really {adjective}.".format(**kwargs)

应该返回

"My name is mark and I'm really ."

而不是抛出 KeyError(如果我们不做任何事情会发生这种情况)。

令人尴尬的是,我什至无法为这个问题想出一个不优雅的解决方案。我想我可以通过不使用 str.format 来解决这个问题,但如果可能的话,我宁愿使用内置的(主要是我想要的)。

注意:我事先不知道会使用什么键。如果有人包含 key 但没有将其放入 kwargs 字典中,我会尝试优雅地失败。如果我 100% 准确地知道要查找哪些键,我只需填充所有键并完成它。

最佳答案

您可以按照 PEP 3101 中的建议进行操作并使用子类 Formatter:

import string

class BlankFormatter(string.Formatter):
def __init__(self, default=''):
self.default=default

def get_value(self, key, args, kwds):
if isinstance(key, str):
return kwds.get(key, self.default)
else:
return string.Formatter.get_value(key, args, kwds)

kwargs = {"name": "mark", "adj": "mad"}
fmt=BlankFormatter()
print fmt.format("My name is {name} and I'm really {adj}.", **kwargs)
# My name is mark and I'm really mad.
print fmt.format("My name is {name} and I'm really {adjective}.", **kwargs)
# My name is mark and I'm really .

从 Python 3.2 开始,您可以使用 .format_map作为替代方案:

class Default(dict):
def __missing__(self, key):
return '{'+key+'}'

kwargs = {"name": "mark"}

print("My name is {name} and I'm really {adjective}.".format_map(Default(kwargs)))

哪个打印:

My name is mark and I'm really {adjective}.

关于python - 如果未在 str.format 中传递,则将值留空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com