Python中的格式化字符串与变量格式化

10

我该如何使用变量来格式化我的变量?

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
或者
(...):
    print "{:"+str(column_width)+"}: {}".format(item, qty)

> ValueError: Single '}' encountered in format string

我可以做的是先构造格式化字符串,然后再格式化它:

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

> lube    : 1
> towel   : 4
> pinapple: 1

看起来很笨拙。有没有更好的方法来处理这种情况?

2个回答

17

好的,问题已经解决了,以下是以后参考的答案:变量可以嵌套,因此这个解决方案完全有效:

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

2
是的,这就是为什么.format()被优先选用于%格式化字符串的原因之一。 - John La Rooy
1
据我所知,百分号符号“%”在 Python 3 的未来版本中被认为已经过时,并将被删除,尽管目前还没有宣布具体的截止日期。 - Manuel Ebert
2
文档中搜索的关键词是“嵌套”,如果你不知道答案,这个词很难记住。;) - hobs
@ManuelEbert 它将被弃用,但我认为在我们的有生之年内它很可能不会被移除,因为移除它的成本很高,而收益很小。 - gerrit

0

Python 3.6 开始,你可以使用 f-strings 来实现更简洁的编程:

>>> things = {"car": 4, "airplane": 1, "house": 2}
>>> width = max(len(thing) for thing in things)
>>> for thing, quantity in things.items():
...     print(f"{thing:{width}} : {quantity}")
... 
car      : 4
airplane : 1
house    : 2
>>> 

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