我有一本可以从大学获得的学位词典。 字典看起来像这样:
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中的所有4个索引,因为" of"出现在phrase_list的最后一个索引中,并且是字典值的一部分'哲学博士'。此外,最后一个索引将被拔出,因为这些字母可能会被删除。出现在' made'并且是“艺术硕士”的价值观。键入deg_dict。
如何使字典值成为整体'因为它们 - 只有整个短语“哲学博士”才能返回来自phrase_list的索引。在phrase_list中找到或者如果字母“MA'他们自己找到了(不是一句话)?
答案 0 :(得分: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.
答案 1 :(得分:1)
如果您想要索引,而不是第6行的0liveradam8回答中的print(deg_dict[word])
,请添加以下行:
print(sentence.find(word))