【问题标题】:Conditionally format string有条件地格式化字符串
【发布时间】:2016-03-01 18:12:15
【问题描述】:

考虑下面的代码

', '.join(['{} <{}> ({})'.format(user.nickname, user.email, user.employee_id)
                     for user in referrers])

现在,当employee_id 不存在时,我想跳过() 并留空。

referrer_strs = []
for user in referrers:
    if user.employee_id is None:
        referrer_strs.append('{} <{}>'.format(user.nickname, user.email))
    else:
        referrer_strs.append('{} <{}> ({})'.format(user.nickname, user.email, user.employee_id))

return ', '.join(referrer_strs)

我可以将其转换为用于理解,但有没有更 Pythonic 的方式来做到这一点?

【问题讨论】:

  • 这段代码看起来不错。它是可读的。不要改变它。
  • 我知道它是可读的,但我想知道是否有一些字符串格式的魔法,例如'{} {? ()}'
  • 试试这个pyformat.info。也许你发现了什么。但我不这么认为。

标签: python string format


【解决方案1】:

代码现在更有趣了=P

如果您想在一行中完成所有操作,可以使用“伪三元运算符”

class User:
    def __init__(self, nickname, email, employee_id=None):
        self.nickname = nickname
        self.email = email
        self.employee_id = employee_id

referrers = [
    User('macabeus', 'macabeus@gmail.com', 1),
    User('joão', 'joao@gmail.com'),
    User('josé', 'jose@gmail.com', 3)
]

print(
    ', '.join(
        ['{} <{}>{}'.format(user.nickname, user.email, ('', ' ({})'.format(user.employee_id))[user.employee_id is not None])
                     for user in referrers]
    )
)

【讨论】:

    【解决方案2】:

    使用这个conditional list indices removal SO post,尝试添加一个 if 逻辑:

    ', '.join(['{} <{}> ({})'.format(user.nickname, user.email, user.employee_id)
                         for user in referrers if not (user.employee_id is None)])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多