有没有更好的方法将令牌转换为Python中的功能?

时间:2017-09-04 08:09:27

标签: python

我按照伪代码编写了一个Python函数,将标记转换为特征。它的作用是返回最常出现的k代币。我想知道是否有更好/更好的方式来编写函数。

def token2feature(k,ts): #k is number of desired features; ts is a list of all tokens
   import operator
   hs={} #create an empty dictionary
   for tok in ts:
       hs[tok] =hs[tok]+1 if tok in hs else 1
   sorted_hs=sorted(hs.items(),key=operator.itemgetter(1),reverse=True)
   return dict(sorted_hs[:k]).keys()
编辑


输入是令牌列表

ts=['a','b','a','a','b'','c']
k=2

输出是列表中发生的最多k个元素。

['a','b']

2 个答案:

答案 0 :(得分:3)

使用Counter

from collections import Counter

def token2feature(k, ts):
   return [t for t, c in Counter(ts).most_common(k)]

print(token2feature(2, ['a', 'a', 'b', 'c', 'b'])) #=> ['a', 'b']

来自文档:

  

计数器是用于计算可哈希对象的dict子类。它是一个无序集合,其中元素存储为字典键,它们的计数存储为字典值。

答案 1 :(得分:1)

假设k是" top k"和ts是您计算的项目

您可能正在寻找Counter

most_common方法
from collections import Counter
from operator import itemgetter as at
def token2feature(k, ts):
    return map(at(0), Counter(hs).most_common(k))