字典的Python列表理解

时间:2018-07-02 09:14:53

标签: python lambda nltk

我来自Java / C,并且正在尝试行理解。我有以下代码,但似乎无法获得等效的行理解。

stop_words = set(nltk.corpus.stopwords.words('english'))

tokenizer = nltk.tokenize.RegexpTokenizer(r'\w+')
tokens = tokenizer.tokenize(text)

token_map = {}

for token in tokens:
    token = token.lower()
    if english_dict.check(token):
        if token not in stop_words:
            if token in token_map:
                token_map[token] += 1
            else:
                token_map[token] = 1

sorted_map = sorted(token_map.items(), key=operator.itemgetter(1))

return sorted_map

2 个答案:

答案 0 :(得分:1)

您可以将token_map = {}之后的所有内容替换为:

return Counter(token for token in map(str.lower, tokens)
               if english_dict.check(token)
               if token not in stop_words
               ).most_common()

将此导入添加到文件顶部:

from collections import Counter

答案 1 :(得分:0)

您可以这样做:

tokens = tuple(map(str.lower,tokens))
token_map = {token: tokens.count(token)
             for token in set(tokens)
             if english_dict.check(token) and token not in stop_words}
sorted_map = sorted(token_map.items(), key=operator.itemgetter(1))

编辑:

我的答案是您想要的,但是如果您想要更快更好的解决方案,请参阅@AlexHall答案。