0

Consider following code

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

Now I'd like to skip () and empty space when employee_id doesn't exist.

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)

I could convert it to for comprehension, but is there a more pythonic way of doing this?

Cœur
  • 37,241
  • 25
  • 195
  • 267
Lukasz Madon
  • 14,664
  • 14
  • 64
  • 108

2 Answers2

0

The code is now more fun =P

You can use the "pseudo-ternary operator", if you want to do everything in just one line

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]
    )
)
macabeus
  • 4,156
  • 5
  • 37
  • 66
0

Using this conditional list indices removal SO post, try adding an if logic:

', '.join(['{} <{}> ({})'.format(user.nickname, user.email, user.employee_id)
                     for user in referrers if not (user.employee_id is None)])
Community
  • 1
  • 1
Parfait
  • 104,375
  • 17
  • 94
  • 125