[根据词频排序]使用operator.itemgetter(1)
2019-01-08 本文已影响8人
VanJordan
return sorted(
vocab_freq_map.items(), key=operator.itemgetter(1), reverse=True)
-
operator.itemgetter
函数 -
operator
模块提供的itemgetter
函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。
a = [1,2,3]
>>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
- 要注意,
operator.itemgetter
函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。 - 和这个是等价的
sorted(l, key=lambda x:x[0])
,所以感觉用lambda函数更方便啊, -
list.sort()
是对已经存在的列表进行操作,进而可以改变进行操作的列表。而内建函数sorted
返回的是一个新的list
,而不是在原来的基础上进行的操作.
vocab_freqs = dict((term, freq) for term, freq in vocab_freqs.items()
if doc_counts[term] > FLAGS.doc_count_threshold)
# Sort by frequency
ordered_vocab_freqs = data_utils.sort_vocab_by_frequency(vocab_freqs)
# Limit vocab size
ordered_vocab_freqs = ordered_vocab_freqs[:MAX_VOCAB_SIZE]
# Add EOS token
ordered_vocab_freqs.append((data_utils.EOS_TOKEN, 1))
- 首先先去除词频大于
threshold
的单词组成字典形式。 - 然后使用
sorted
进行排序。 - 然后使用
MAX_VOCAB_SIZE
来截取。 - 最后加上
EOS_TOKEN
。