当前位置: 首页 > 面试题库 >

如果未以str.format传递,则将值留空

黄骏喆
2023-03-14
问题内容

我遇到了一个非常简单的问题,无法解决这个问题。

我正在使用str.formatdict替换中传递的用于该格式的函数中创建一个字符串。我想创建字符串并使用值将其格式化(如果已传递),否则将其留空。

防爆

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,但如果可能的话,我宁愿使用内置的(主要是我想要的功能)。

注意:我事先不知道将使用什么键。如果有人包含密钥但未将其放入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}.


 类似资料:
  • 因此,我目前正在尝试找出,如果提供的数据模型不包含标记,是否可以保留该值。我知道,但这不适用于FreeMarker标记。 基本上,我想做的是:

  • 一旦我的jqgrid中的单元格是使用格式选项格式化的货币:{decimal分隔符:".",千分隔符: ",", decimalPlace: 2,前缀: "$ ",defaultValue:"} 当我有一个值时就是这种情况,但如果我没有特定字段网格的值,则默认值为0.00美元,我希望将其保留为空,而不是填充默认值,即0.00美元 我该怎么做?在查找了一些问题后,我使用了自定义格式化程序 在这种情况下

  • 问题内容: 在我的ASP.NET MVC应用程序中,我希望用户将值添加到文本框中,然后按Ajax.ActionLink。我想做这样的事情: Ajax.ActionLink(“ Go”,“ Action”,“ Controller”,新的{value = textbox1.value}) 还是我还能如何使此文本框值返回到我的操作?jQuery的? 问题答案: 您可以使用AJAX $ .get方法运行

  • 问题内容: Docker 1.9允许将参数传递给dockerfile。参见链接:https : //docs.docker.com/engine/reference/builder/#arg 我该如何在ENTRYPOINT指令中传递相同的药品? 我的dockerfile有 ARG $ Version = 3.1 ENTRYPOINT /tmp/folder-$Version/sample.sh开始

  • 问题内容: 我在导入带有熊猫的JSON文件时遇到一些困难。 这是我得到的错误: 文件结构是这样简化的: 它来自Coursera的华盛顿大学的机器学习课程。您可以在这里找到文件。 问题答案: 尝试 该文件仅包含键值为标量的键值对。您可以使用将其转换为数据框。 您还可以执行以下操作: 现在数据就是字典。您可以将其传递给数据框构造函数,如下所示:

  • 两个问题。 我有User和Note类。用户可以有许多笔记。如何通过Thymeleaf显示属于用户的每个便笺的id?th:text=“${u.notes.id}”不起作用 我有一个表(见图),其中包含每个具有布尔isUserChecked值的用户的复选框,下面是删除选中用户的按钮。Thymeleaf更正显示isUserChecked值的状态。Delete按钮在手动选中checkbox时不起作用,但在