私は名前を取り、それをフォーマットし、それを他の名前のリストと比較して何回一致するかを調べるpythonスクリプトを持っています。問題は、それが私がスクリプトに入力したくない中間のイニシャルを持つために比較される名前です。文字列の比較でワイルドカードを組み込む
list_of_names = ['Doe JM', 'Cruz CR', 'Smith JR', 'Doe JM', 'Maltese FL', 'Doe J']
ここで、名前を再フォーマットする簡単な機能があります。
f_name = name_format('John','Doe')
print(f_name)
> 'Doe J'
今、私は毎回「ドウJ」または「ドウJM」が表示され、値がtrueの比較を行いたいです。以下の機能は意図したとおりに動作しません。
def matches(name, list):
count = 0
for i in list:
if i == name:
count = count + 1
else:
pass
return(count)
print (matches(f_name, list_of_names))
> 1
私の目標は、これらを行うには3への復帰が同じようにすることです、私はこのケースでは「ドウJM」内の「M」になるミドルネームのイニシャルを無視します。
私がしたいことは、名前を「Doe J」にフォーマットする行に沿ったものです。どこ? 'ワイルドカードです。私はfnmatchをインポートしようとしましたが、いくつかのツールを使用しましたが、失敗しました。
'full_name.startswith(part_name)'が 'in'でテストするよりも安全です。 – Norman
@Normanは、名前のデータベースの目標と内容に依存します。私はTSが小さな変更を加えることができると思う。その目的は、そのような場合にどのように変換が起こるかを示すことでした。 – JRazor