【问题标题】:Can you cast a string to upper case while formating格式化时可以将字符串转换为大写吗
【发布时间】:2019-03-06 12:33:47
【问题描述】:

动机

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


假设我有一个准备好格式化为的 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

【问题讨论】:

  • 使用f-strings (Python >= 3.6) 你实际上可以做到这一点:d = {"a": "hello", "b": "bye", "c": "hi"}; print(f"{d['a'].upper()}_{d['b']}_{d['c']}_{d['a']}")。取自this Q&A。如果您不将此问题限制为低于 3.6 的 Python 版本,我很想将其标记为重复(因此注释而不是答案)。
  • @shmee 不幸的是,我正在使用 2.6.6,我会这样标记它。同样,(我知道乞丐不应该是一个选择者)我不喜欢在 print 语句中指定字典名称。
  • 我能想到的最简洁的方法是:string.format(**{**dictionary, 'a' : dictionary['a'].upper()}) 在其中展开两个字典,内部展开负责 upper() 调用,另一个只是将字典传递给格式。

标签: python string string-formatting python-2.x


【解决方案1】:

是的,你可以这样做:

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

【讨论】:

  • “时代变了” - Python 我认为这是 python-3.x 的东西?
【解决方案2】:

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

如果您要采用更难的方法,以下链接会有所帮助。 Python: Capitalize a word using string.format()

【讨论】:

  • 我会接受这个答案,因为在 python 中似乎没有真正的方法可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 2019-01-08
  • 2018-09-16
  • 2018-05-17
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
相关资源
最近更新 更多