代码之家  ›  专栏  ›  技术社区  ›  Hews

字典的python列表理解

  •  -1
  • Hews  · 技术社区  · 6 年前

    我来自爪哇/ 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 回复  |  直到 6 年前
        1
  •  0
  •   Ali Shahrivarian    6 年前

    你可以这样做:

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

    编辑:

    我的答案是关于你想要什么,但是如果你想要更快更好的解决方案,请参见@alexphall answer。

        2
  •  1
  •   Alex Hall    6 年前

    您可以替换 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