格式化输出1而不是True

1 投票
1 回答
1087 浏览
提问于 2025-04-17 23:03

我有一个函数,它接收一个字典,然后把它格式化成字符串,以便在表格中打印出来。

我很好奇为什么下面的代码能正常工作:

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         '])

为什么没有出现真或假(True 或 False)呢?

1 个回答

4

这似乎是因为使用了对齐说明符(如果不使用它,程序就会按预期工作)。你可以通过明确指定转换来强制打印布尔值为 TrueFalse

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

– 注意 !s 这一部分。指定这个会让值使用 __str__ 来格式化。如果不指定,就会使用 __format__。你可以验证一下这里发生了什么:

>>> True.__format__('')
'True'
>>> True.__format__('<5')
'    1'
>>> True.__str__()
'True'

撰写回答