我有一个来自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)
这很有效。我想要做的是生成名为nouns
,verbs
,adjectives
等的列表,其中包含此词性的所有单词。鉴于len(posdict.keys())
返回233340
答案 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
运算符会相应地放置多个类型的单词。