3

次の形式の電子メールアドレスのリストがあります。

名前###@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でこれを行う最もエレガントな方法は何ですか?

4

1 に答える 1