错误:' dict_values' object不支持索引

时间:2018-01-23 20:28:34

标签: python python-3.x

我正在尝试使用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

2 个答案:

答案 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]