2016-09-07 6 views
0

SVDモデルに基づいて推奨をテストしています。しかし、私は以下のようにそれを実行した後にエラーメッセージが表示されました:TypeError:リストのインデックスは、Python SVDモデルのタプルではない整数でなければなりません

ここ

は私のテストコードは次のとおりです。

import sys 
from sys import argv 
import csv 
import recsys.algorithm 
recsys.algorithm.VERBOSE = True 
from recsys.algorithm.factorize import SVD 
from recsys.datamodel.data import Data 

likes = [] 
with open('/Users/xps13mynotebook/Desktop/w2v/likes.tsv', 'r') as f: 
    for line in f.readlines(): 
     username,user_likes = line.strip().split('\t') 
     likes.append((username,user_likes)) 
data = Data() 
VALUE = 1.0 
for username in likes: 
    for user_likes in likes[username]: 
     data.add_tuple((VALUE, username, user_likes)) # Tuple format is: <value, row, column> 

svd = SVD() 
svd.set_data(data) 
k = 5 
svd.compute(k=k, min_values=3, pre_normalize=None, mean_center=False, post_normalize=True) 

svd.similar('sheila') 

エラー:例外TypeErrorはあなたが持つ要素にアクセスできないことを言っている

TypeError         Traceback (most recent call last) 
<ipython-input-30-913000ff4e0e> in <module>() 
    10 VALUE = 1.0 
    11 for username in likes: 
---> 12  for user_likes in likes[username]: 
    13   data.add_tuple((VALUE, username, user_likes)) # Tuple format is: <value, row, column> 
    14 

TypeError: list indices must be integers, not tuple 
+0

はあなたのコードを理解することはできませんそのindented..useないlikes.usernameをlikesの代わりに[usernsame] – SumanKalyan

答えて

0

タプルのリストを反復しているとき、各値はタプルそのものです。あなたのコードは、それがタプルの最初の要素だと示唆しています(または索引、私は確信していません - 明らかに間違っているのは間違っているということです)。

for username in likes: 
    # username is now tuple from list 
    for user_likes in likes[username]: # list[tuple_stored_in_list] is invalid and causes TypeError 
     pass # do something 

一度タプルに保存されている両方の要素を達成するためにtuple unpackingを使用して、タプルのリストを反復処理:...

for username, user_likes in likes: 
    data.add_tuple((VALUE, username, user_likes)) # Tuple format is: <value, row, column> 
0

リストにタプルを指定すると、リスト内の位置である整数が必要です。

なぜこれが起こっているのですか?

likes.append((username,user_likes)) 

for username in likes: 

好きタプルが格納されているリストであるので、同様にユーザー名が("mike", 6)のようなものです。

次に、それを要素の位置としてリストに渡します。だからこそあなたは誤りを抱えています。あなたのコードで何をしたいか分かりませんが、今はかなりナンセンスです。

関連する問題