python中的格式字符串,具有可变格式

Man*_*ert 10 python string string-formatting

如何使用变量格式化变量?

cart = {"pinapple": 1, "towel": 4, "lube": 1}
column_width = max(len(item) for item in items)
for item, qty in cart.items():
    print "{:column_width}: {}".format(item, qty)

> ValueError: Invalid conversion specification
Run Code Online (Sandbox Code Playgroud)

要么

(...):
    print "{:"+str(column_width)+"}: {}".format(item, qty)

> ValueError: Single '}' encountered in format string
Run Code Online (Sandbox Code Playgroud)

但是,我能做的是首先构造格式化字符串然后格式化它:

(...):
    formatter = "{:"+str(column_width)+"}: {}"
    print formatter.format(item, qty)

> lube    : 1
> towel   : 4
> pinapple: 1
Run Code Online (Sandbox Code Playgroud)

然而,看起来很笨拙.是不是有更好的方法来处理这种情况?

Man*_*ert 17

好的,问题已经解决了,这是未来参考的答案:变量可以嵌套,所以这很好用:

for item, qty in cart.items():
    print "{0:{1}} - {2}".format(item, column_width, qty)
Run Code Online (Sandbox Code Playgroud)

  • 是的,这就是 `.format()` 优于 `%` 格式字符串的原因之一 (2认同)
  • 在[文档](https://docs.python.org/2/library/string.html)中搜索的单词是"嵌套",当你还不知道答案时很难记住;) (2认同)