我正在尝试使用Kaggle Bag of Words模块,但有一次,它正在抛出这个错误:
kmeans_clustering = KMeans( n_clusters = num_clusters )
idx = kmeans_clustering.fit_predict( word_vectors )
word_centroid_map = dict(zip( model.wv.index2word, idx ))
现在,
for cluster in range(0,10):
print("\nCluster %d" % cluster)
words = []
for i in range(0,len(word_centroid_map.values())):
if( word_centroid_map.values()[i] == cluster ):
words.append(word_centroid_map.keys()[i])
print(words)
错误是:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-f230ff75f988> in <module>()
3 words = []
4 for i in range(0,len(word_centroid_map.values())):
----> 5 if( word_centroid_map.values()[i] == cluster ):
6 words.append(word_centroid_map.keys()[i])
7 print(words)
TypeError: 'dict_values' object does not support indexing
答案 0 :(得分:5)
word_centroid_map.values()
返回一个无法编入索引的dict_values对象。
但如果你想索引它,你可以通过list(word_centroid_map.values())
进行转换。
这是一个非常简单的例子:
>>> d = {'a': [1,2,3,4], 'b':[5,6,7,8]}
>>> d.values()
dict_values([[1, 2, 3, 4], [5, 6, 7, 8]])
>>> d.values()[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'dict_values' object does not support indexing
>>> list(d.values())[0]
[1, 2, 3, 4]
答案 1 :(得分:2)
直接的答案是dict的values
方法返回一个不可索引的对象,如错误所示。您可以通过转到列表来解决这个问题:
list(word_centroid_map.values())
但是你最好像这样重写你的循环:
for key, value word_centroid_map.items():
if value == cluster:
words.append(key)
甚至更好,使用列表理解:
words = [k for k, v in word_centroid_map.items() if v == cluster]