2017-08-19 19 views
0

私は大学から取得できる程度の辞書を持っています。 辞書には、次のようになります。私もフレーズのリストを持っている辞書から完全な文字列をPythonリストの文字列にマッチさせる方法は?

deg_dict = [ 
{'Doctor of Philosophy': 'PhD', 'Ph.D.', 'Doctor of Philosophy'}, 
{'Bachelor of Science': 'BS', 'B.S.', 'BSc', 'B.Sc.'} 
{'Master of Arts': 'MA', 'M.A.'} 
] 

、私は度の辞書の値に対応する項目があり、そのリスト内の語句のインデックスを見つけたいです。

phrase_list = ['Lisa has a Ph.D.', 'Maggie earned her B.S. from Duke University', 'Bart dropped out of his MA program', 'I made this out of thin air'] 

私はこのコードを使用してこの操作を行うことができます。

degindex = [i for i, s in enumerate(pharse_list) for key, value in deg_dict.iteritems() for deg in value if deg in s] 

しかし、これは非常に厄介で、非特異的であるphrase_listからインデックスを引き出します。たとえば、degindexはphrase_listの最後のインデックスに "of"が表示され、辞書値の 'Doctor of Philosophy'の一部であるため、phrase_listから4つのインデックスをすべて返します。さらに、最後のインデックスは「ma」という文字が「made」という単語に表示され、deg_dictの「Master of Arts」キーの下の値であるため、取り除かれます。

どのようにして辞書の値をそのまま「全体」にすることができますか?phrase_listのインデックスがphrase_list内に「Phothosophy」というフレーズ全体が見つかった場合、または「MA」の文字が自分で見つけた(言葉の中ではない)?

+5

辞書ではありません。実際、Pythonはまったく有効ではありません。 –

答えて

2

先ず、必要に応じて機能するように辞書を変更してみましょう。この辞書で

deg_dict = { 
'PhD':'Doctor of Philosophy', 
'Ph.D.':'Doctor of Philosophy', 
'BS':'Bachelor of Science', 
'B.S.':'Bachelor of Science', 
'BSc':'Bachelor of Science', 
'B.Sc.':'Bachelor of Science', 
'MA':'Master of Arts', 
'M.A.':'Master of Arts'} 

あなたが入力し、このような程度の略称場合、:deg_dict['PhD']を、それがこのような出力度の完全な名前をします。今、このコードを使用して"Doctor of Philosophy"

我々は、かどうかを調べることができます各フレーズには略語が含まれ、度のフルネームが出力されます。文章に複数の略語が含まれている場合は、最初の文章のみが抽出されます。

phrase_list = ['Lisa has a Ph.D.', 'Maggie earned her B.S. from Duke University', 'Bart dropped out of his MA program', 'I made this out of thin air'] 

for sentence in phrase_list: 
    for word in sentence.split(" "): 
     if word in deg_dict: 
      print(deg_dict[word]) 
      break 
    else: 
     print("No abbreviation found in sentence.") 

出力:

Doctor of Philosophy 
Bachelor of Science 
Master of Arts 
No abbreviation found in sentence. 
+0

これをお寄せいただきありがとうございます。私は逆の辞書を試し、それが修正されているかどうかを確認します!しかし、私は学位の名前ではなく、学位が見つかったインデックスを引き出そうとしています(私の例では、0,1,2が返されることを望みます)これのためのより良いアプローチですか? – lizzard

1

あなたは、6行目の0liveradam8の答えに代わりprint(deg_dict[word])のインデックスを、必要な場合は、代わりに次の行を追加します。

print(sentence.find(word)) 
関連する問題