【问题标题】:Formatting a replacement from dictionary从字典格式化替换
【发布时间】:2015-12-23 02:29:06
【问题描述】:

我使用字典来格式化字符串:

print '%(duration)s' % {'duration':'898'}

一切都按预期进行。现在我想确保 %(duration) 的替换将在左侧填充零,因此它有 5 位数字。结果应如下所示:''00898'' 保证持续时间永远不会超过 5 位数。

'%(duration)s' 会是什么样子?

【问题讨论】:

    标签: python string dictionary formatting


    【解决方案1】:

    您也可以使用zfill

    str.zfill(width)

    返回一个长度为宽度的字符串中用零填充的数字字符串。

    代码看起来像

    >>> print '%(duration)s' % {'duration':'898'.zfill(5)}
    00898
    

    【讨论】:

    • 可能有效,但“真实”值是从 csv 文件加载的。所以我不能将它们中的每一个都填充到 5 个字符。 kumar 的解决方案。谢谢你的回答
    • @EhmKah 欢迎您。但是请接受解决您问题的答案(在这种情况下是 ASK)。未来一切顺利。
    【解决方案2】:

    添加字段宽度,以0 开头;但是,这适用于数字:

    print '%(duration)05d' % {'duration': 898}
    

    请注意,我将值更改为整数,格式为d

    您的总字段宽度(包括填充)为 5 个字符,0 告诉字符串格式化代码以零填充较短的数字。

    如果不能转换为int,请切换到较新的str.format() method

    print '{duration:0>5s}'.format(**{'duration':'898'})
    

    0> 部分告诉方法右对齐并使用0 进行填充。详情请见Format Specification Mini-Language documentation

    演示:

    >>> print '%(duration)05d' % {'duration': 898}
    00898
    >>> print '{duration:0>5s}'.format(**{'duration':'898'})
    00898
    

    【讨论】:

    • 快要工作了。 5位数有效。但我有空格而不是零。
    • @EhmKah:是的,更新了,因为s 格式化程序不支持这个。我将添加一个 str.format() 替代方案。
    • 在“真实”问题中,我不知道字典值的类型。因为我是从 csv 中读取的。 kumar 的解决方案效果很好。对不起。但感谢您的快速答复
    • @EhmKah:但你仍然用零填充,所以你假设它们是数字。 :-)
    • @EhmKah:我注意到 Anand 的回答与我的 str.format() 选项相同。
    【解决方案3】:

    我更喜欢在这里使用str.format。示例 -

    In [46]: "{duration:0>5}".format(duration='898')
    Out[46]: '00898'
    

    如果要使用字典,可以将字典解包到 .format 的参数中。示例 -

    In [48]: "{duration:0>5}".format(**{'duration':'898'})
    Out[48]: '00898'
    

    这里的主要部分是-{duration:0>5}-这里字段名称在:之前,:之后的0>表示右对齐,通过填充0s和5表示数量右对齐的空格数。

    你可以找到更多关于string format syntax here的信息。

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2019-09-01
      • 2016-01-07
      • 1970-01-01
      • 2019-01-08
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多