我有一个电子邮件地址列表,格式如下:
姓名###@email.com
但数字并不总是存在。例如:john45@email.com、bob@email.com joe2@email.com 等。我想按数字对这些名称进行排序,没有数字的在前。我想出了一些可行的方法,但是作为 Python 新手,我很好奇是否有更好的方法来做这件事。这是我的解决方案:
import re
def sortKey(name):
m = re.search(r'(\d+)@', name)
return int(m.expand(r'\1')) if m is not None else 0
names = [ ... a list of emails ... ]
for name in sorted(names, key = sortKey):
print name
这是我脚本中唯一一次使用“sortKey”,所以我希望它是一个 lambda 函数,但我不知道该怎么做。我知道这会起作用:
for name in sorted(names, key = lambda n: int(re.search(r'(\d+)@', n).expand(r'\1')) if re.search(r'(\d+)@', n) is not None else 0):
print name
但我认为我不需要调用 re.search 两次来执行此操作。在 Python 中这样做最优雅的方法是什么?