你能在格式化时将字符串转换为大写吗?

4

动机

假设您有一个字符串在某个字符串中被使用了两次。但是,在一种情况下它是大写的,而在另一种情况下它是小写的。如果使用字典,则似乎解决方案是添加一个新的元素,该元素为大写。


假设我有一个准备好格式化的 Python 字符串:

string = "{a}_{b}_{c}_{a}"

希望输出结果为:

HELLO_by_hi_hello

我还准备了一个字典:

dictionary = {a: "hello", b: "bye", c: "hi"}

如果不与字典进行交互,设置一个新的元素d"HELLO",如下所示:

dictionary['d'] = dictionary['a'].upper()
string = "{d}_{b}_{c}_{a}"
string.format(**dictionary)
print(string)
>>> HELLO_bye_hi_hello

有没有一种方法可以让字符串中某个位置的元素a始终为大写?例如像这样的内容:
string= "{a:upper}_{b}_{c}_{a}"
string.format(**dictionary)
print(string)
>>> HELLO_bye_hi_hello

1
使用f-strings(Python >= 3.6),您实际上可以做到这一点:d = {"a": "hello", "b": "bye", "c": "hi"};print(f"{d['a'].upper()}_{d['b']}_{d['c']}_{d['a']}")。摘自此问答。如果您不将此问题限制在Python版本低于3.6,则我倾向于将其标记为重复(因此是评论而不是答案)。 - shmee
@shmee 很抱歉,我正在使用2.6.6版本,并将标记为此版本。另外,(虽然我知道乞丐不能有选择权),但我不太喜欢在打印语句中指定字典名称。 - akozi
1
我能想到最简洁的方法是:string.format(**{**dictionary, 'a' : dictionary['a'].upper()}),其中你需要扩展两个字典,内部扩展负责 upper() 调用,而另一个则只是将字典传递给格式化函数。 - Torxed
2个回答

9

是的,你可以这样做:

string = "{d.upper()}_{b.lower()}_{c.lower()}_{a.lower()}"

时代在改变 - Python我猜这是Python 3.x的事情? - akozi

2

不行,你不能那样做。 在最简单的解决方案中,您可以编写一个lambda函数来将字符串中的值大写。或者,如果您真的想以这种方式实现目标,可以子类化strnig.Formatter。

如果您选择使用更难的方法,则以下链接可能会有所帮助。 Python:使用string.format()使单词大写


我将接受这个答案,因为它清楚地表明在Python中没有真正的方法来做到这一点。 - akozi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接