如何将字典中的完整字符串与python列表中的字符串进行匹配?

时间:2017-08-19 19:50:06

标签: python string list dictionary

我有一本可以从大学获得的学位词典。 字典看起来像这样:

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'他们自己找到了(不是一句话)?

2 个答案:

答案 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))