Python 格式化打印1而不是True

Python 格式化打印1而不是True,python,Python,我有一个函数,它接收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(dic

我有一个函数,它接收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)
我明白了

B = format_dict(A)
('Argument |   Value   ',
['five  | 20000     ',
'four  | Long entry',
'one   | 1         ',
'three | 1         ',
'two   | 0         '])

为什么没有真或假?

这似乎是使用对齐说明符的结果(如果没有对齐说明符,它将按预期工作)。通过明确指定转换,可以强制将布尔值打印为
True
False

format_string = '{0:<{arg_len}} {seperator} {1!s:<{val_len}}'

这似乎是使用对齐说明符的结果(如果没有对齐说明符,它将按预期工作)。通过明确指定转换,可以强制将布尔值打印为
True
False

format_string = '{0:<{arg_len}} {seperator} {1!s:<{val_len}}'

我设法用
str(dict\u in[key])
来包装arg,
dict\u in[key])
来解决这个问题,但我不知道我是怎么想的。@polkid呃……有没有什么特别的原因不使用这个答案中给出的干净解决方案?我还没看到呢!目前正在进行测试。创建一个包含许多不同大小和类型的测试。就我所知,是什么让你的比我的更干净?@polkid它不需要你手动转换数据,你把所有的格式都放在它所属的地方——放在格式字符串中——而不是泄漏到代码的不同部分。我通过将arg,
dict_in[key]
str(dict_in[key])包装起来解决了这个问题
,不知道我是怎么想的。@polkid呃……有什么特别的原因不使用这个答案中给出的清洁溶液吗?还没看到呢!目前正在进行测试。创建一个包含许多不同大小和类型的测试。就我所知,是什么让你的比我的更干净?@polkid它不需要你手动转换数据,你把所有的格式都放在它所属的地方——放在格式字符串中——而不是泄漏到代码的不同部分。
>>> True.__format__('')
'True'
>>> True.__format__('<5')
'    1'
>>> True.__str__()
'True'