次の形式の電子メールアドレスのリストがあります。
名前###@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」を使用するのはこれだけなので、ラムダ関数にしたいのですが、その方法がわかりません。私はこれがうまくいくことを知っています:
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 を 2 回呼び出す必要はないと思います。Pythonでこれを行う最もエレガントな方法は何ですか?