我有一个字典,看起来像这样:
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
这会产生如下所示的输出:
Last: 79.21 Change: N/A (-1.19%)
Prev Close: 80.16 Day's Range: 78.91 - 79.91
如果这些数字没有改变,那么这种方法运作得很好,如果" days_range"设置为" 78.91 - 79.91"它会进一步跳到右边。例如:
{{1}}
我也不能说我对使用" \ t"非常满意。分离列,因为我担心如果第一列中的值太长,这可能导致右列被推得比正确的更远。
有一种简单而优雅的方法吗?我更喜欢不依赖于非标准库的解决方案,而且相对简单。
我也想知道一种简单的方法,可以在美元符号前面添加值,而无需修改字典中的值。
答案 0 :(得分:2)
在Python 3及更新版本中,您可以通过str.format()
将其作为:
print('{:<15} {:<15} {:<15} {:<15}'.format('Last:', d['last_price'], 'Change:', '{} ({})'.format(d['change'], d['change_percent'])))
# ^ Note this
打印:
Last: 760.54 Change: N/A (-1.39%)
此处, <
表示您希望内容与您提到的光标位置保持对齐,其中>
表示右对齐。
以下是同时打印时正在打印的数据的结果:
>>> '{:<15} {:<15} {:<15} {:<15}'.format('Prev Close:', 771.23, 'Day\'s Range:', '760.00 - 775.00')
"Prev Close: 771.23 Day's Range: 760.00 - 775.00"
>>> '{:<15} {:<15} {:<15} {:<15}'.format('Prev Close:', 80.16, 'Day\'s Range:', '78.91 - 79.91')
"Prev Close: 80.16 Day's Range: 78.91 - 79.91 "
所有的coulmns都保持对齐。
注意:字符串格式化的上述sysntax仅适用于Python 3及更高版本。在旧版本中,您必须使用%s
作为:
'%-15s %-15s %-15s %-15s' % ('Change: ', d['last_price'], 'Change:', '{} ({})'.format(d['change'], d['change_percent']))
# ^ '-'ive value means align left
打印:
'Change: 760.54 Change: N/A (-1.39%) '
答案 1 :(得分:1)
您可以将其更改为左侧对齐并且对我有效(我使用了ljust()
,但您使用格式的方式也应该有效):
def print_data(d,spaces):
print('Last:'.ljust(spaces) + d['last_price'].ljust(spaces) + \
'Change:'.ljust(spaces) + d['change'] + ' (' + d['change_percent'] + ')')
print('Prev close:'.ljust(spaces) + d['previous_close'].ljust(spaces) +
"Day's Range:".ljust(spaces) + d['days_range'])
data = {
'last_price': '760.54',
'change': 'N/A',
'days_range': '760.00 - 775.00',
'previous_close': '771.23',
'change_percent': '-1.39%',
}
print_data(data,15)
print()
data['days_range'] = '78.91 - 79.91'
print_data(data,15)
至于你关于预先设置美元符号的第二个问题,除了&#34; Day&#39;范围&#34;应该很容易。对于&#34; Day&#34;范围&#34;我不能想到一种比在前面添加一个并将字符串向下分割' - '
并在后半部分添加一个更简单的方法。