来自mobypos.txt文件的Python dict

时间:2015-07-23 12:47:42

标签: python performance dictionary

我有一个来自Moby Project的文件,该文件将一个或多个字母组合在一起,表示他们的词性。例如:

hemoglobin\N
hemogram\N
hemoid\A
hemolysin\N
hemolysis\N
hemolytic\A
hemophile\NA
hemophiliac\N

血红蛋白是名词,hemoid是形容词,血友病可以用作名词或形容词。

我已经从这个文件创建了一个dict,它使用以下代码将一个单词与表示其词性的字母配对:

mm = open("mobypos.txt").readlines()
pairs = []
for x in mm:
    pairs.append(x.split("\\"))
posdict = dict(pairs)

这很有效。我想要做的是生成名为nounsverbsadjectives等的列表,其中包含此词性的所有单词。鉴于len(posdict.keys())返回233340

,最快的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用生成器表达式来获取相对单词的迭代器:

nouns = (w for w,type in posdict.iteritems() if type=='N')

但请注意,由于迭代器是一次性迭代,当你只想迭代它们并且不想获得特定项目或使用某些函数如len时,最好使用它们,在内存使用方面非常优化。但如果你想多次使用它们,最好使用列表理解。

nouns = [w for w,type in posdict.iteritems() if type=='N']

答案 1 :(得分:1)

您可以使用列表理解

nouns = [word, type in posdict.iteritems() if 'N' in type]

adjs = [word, type in posdict.iteritems() if 'A' in type]

verbs = [word, type in posdict.iteritems() if 'V' in type]

in子句中使用if运算符会相应地放置多个类型的单词。