使用python字符串格式有条件地包含其他字符

时间:2014-07-05 22:27:12

标签: python

是否可以使用python的字符串格式仅在变量不为空的情况下有条件地包含其他字符和字符串变量?

>>> format_string = "{last}, {first}"
>>> name = {'first': 'John', 'last':'Smith'}
>>> format_string.format(**name)
'Smith, John' # great!
>>> name = {'first': 'John', 'last':''}
>>> format_string.format(**name)
', John' # don't want the comma and space here, just 'John'

我想使用相同的format_string变量来处理first字典中lastname的空值或非空值的任意组合。

在python中最简单的方法是什么?

3 个答案:

答案 0 :(得分:5)

为什么不使用strip()

>>> format_string = "{last}, {first}"
>>> name = {'first': 'John', 'last':''}
>>> format_string.format(**name).strip(', ')
>>> 'John'

答案 1 :(得分:1)

您可以根据条件为分隔符设置值。

'{first}{separator}{last}'.format(**{"first":first, "last":last,"separator":(", " if last and first else "")})

答案 2 :(得分:0)

你可以通过一个函数运行原始的dict来“清理”它,在适当的地方添加逗号。或者,有一个defaultdict。

以下解决方案,最简单的,执行后处理步骤以删除任何额外的逗号和空格:

import re

name = {'first': 'John', 'last':''}
format_string = '{last}, {first}'

def fixme(instr):
    return re.sub('^, ', '',
                  re.sub(', $', '',
                         instr))

print fixme(format_string.format(**dict(first='John', last='')))
print
print fixme(format_string.format(**dict(first='', last='Smith')))

输出

John

Smith