我有一个函数,它接受一个dict并将其格式化为字符串以便在表格中打印。
我很好奇为什么以下有效:
A = True
print A
True
但是有了这个功能
def format_dict(dict_in, sep='|'):
"""
Format a dict into strings
"""
argument_length = max(len(x) for x in dict_in)
value_length = max(len(str(dict_in[x])) for x in dict_in)
info = {'arg_len' : argument_length,
'val_len' : value_length,
'seperator' : sep}
format_string = '{0:<{arg_len}} {seperator} {1:<{val_len}}'
header_string = '{0:<{arg_len}} {seperator} {1:^{val_len}}'
header = header_string.format('Argument', 'Value', **info)
strings = []
for key in sorted(dict_in):
strings.append(format_string.format(key, dict_in[key], **info))
return (header, strings)
和字典
A = {'five': 20000, 'four': 'Long entry', 'one': True, 'three': True, 'two': False}
我得到了
B = format_dict(A)
('Argument | Value ',
['five | 20000 ',
'four | Long entry',
'one | 1 ',
'three | 1 ',
'two | 0 '])
为什么没有对错?
答案 0 :(得分:4)
这似乎是使用对齐说明符的结果(没有它按预期工作)。您可以通过明确指定转换强制将布尔值打印为True
或False
:
format_string = '{0:<{arg_len}} {seperator} {1!s:<{val_len}}'
- 注意!s
部分。指定此值会导致使用__str__
格式化值。省略它会导致使用__format__
。您可以验证这里发生了什么:
>>> True.__format__('')
'True'
>>> True.__format__('<5')
' 1'
>>> True.__str__()
'True'