代码之家  ›  专栏  ›  技术社区  ›  Chris T.

按多个条件筛选列表中的令牌

  •  0
  • Chris T.  · 技术社区  · 8 年前

    我想根据以下条件从列表中归档一些令牌。 1) 令牌长度大于5

    我使用了以下代码

    #token_list is a list object containing tokenized words from raw text
    
    from collections import Counter
    c = Counter(token_list)
    selected_tokens = [word for word in token_list if len(word) > 5 and c.item[2] > 100]
    
    selected_tokens
    

    如果有人能在这方面启发我,我将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  2
  •   cs95 abhishek58g    8 年前

    有人说 filter ?

    selected_tokens = list(filter(lambda x: len(x) > 5 and c[x] > 100, token_list))
    

    此外,您可以使用 c[...]


    如果你想要速度,可以使用列表理解:

    selected_tokens = [x for x in token_list if len(x) > 5 and c[x] > 100]
    

    如果你想获得满足你条件的单词而没有多余的重复,请使用 set

    token_set = set(token_list)
    selected_tokens = [x for x in token_set if if len(x) > 5 and c[x] > 100]
    

    当心,秩序已失。如果您希望订单没有重复项,请使用 OrderedDict (python<3.6或 dict (python>=3.6)。

    dict_ = OrderedDict()
    for t in token_list:
        dict_[t] = None
    
    selected_tokens = [x for x in dict_ if len(x) > 5 and c[x] > 100]
    

    如果a 字典 如果不这样做,你可以看看 OrderedSet 制作并实施具有相同效果的东西:

    token_set = OrderedSet(token_list)
    selected_tokens = [x for x in token_set if ...] # as usual