【发布时间】:2017-04-02 23:58:37
【问题描述】:
我有一本看起来像这样的字典:
d = {
'last_price': '760.54',
'change': 'N/A',
'days_range': '760.00 - 775.00',
'previous_close': '771.23',
'change_percent': '-1.39%',
}
本词典中的所有值都可能发生变化。这些数字可以从一位数到数位长的数字变化很大。我想格式化这些信息并始终如一地呈现它:
Last: $760.54 Change: N/A (-1.39%)
Prev Close: $771.23 Day's Range: $760.00 - $775.00
到目前为止,我一直在尝试这样做:
print "\
Last: {last_price:>17} \t Change: {change:>11} ({change_percent}) \n\
Prev Close: {previous_close:>11} \t Day's Range: {days_range:>18}\
".format(**d)
这会产生如下所示的输出:
Last: 760.54 Change: N/A (-1.39%)
Prev Close: 771.23 Day's Range: 760.00 - 775.00
虽然如果数字没有变化,这可以很好地工作,但如果“days_range”设置为“78.91 - 79.91”之类的值,它会进一步向右跳。例如:
Last: 79.21 Change: N/A (-1.19%)
Prev Close: 80.16 Day's Range: 78.91 - 79.91
我也不能说我很满足于使用“\t”来分隔列,因为我担心如果第一列中的值太长,这可能会导致右列被推得更远比预期的要好。
有没有一种简单而优雅的方法来做到这一点?我更喜欢不依赖非标准库且相对简单的解决方案。
我还想知道一种无需修改字典中的值即可在值前面加上美元符号的简单方法。
【问题讨论】:
-
它会跳到右边,因为它是一个较短的字符串,并且您正在右对齐它们。听起来您希望每个值在列中左对齐。
标签: python printing string-formatting