TypeError: list indices must be integers, not tuple in Python SVD model
TypeError: list indices must be integers, not tuple in Python SVD model
我正在测试基于 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 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
TypeError 是说当您为它提供元组时,您无法访问带有列表的元素,它需要一个整数,它是列表中的位置。
现在为什么会这样?
likes.append((username,user_likes))
和
for username in likes:
likes 是一个存储元组的列表,因此您在 like 中的用户名类似于 ("mike", 6)
.
然后您将其作为元素的位置传递给列表。这就是你收到错误的原因。我不确切地知道你想要你的代码做什么,但现在它几乎是无稽之谈
当您遍历元组列表时,每个值都是元组本身。您的代码表明它是元组的第一个元素(或索引,我不太确定 - 很明显它是明显错误的)。
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>
我正在测试基于 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 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
TypeError 是说当您为它提供元组时,您无法访问带有列表的元素,它需要一个整数,它是列表中的位置。
现在为什么会这样?
likes.append((username,user_likes))
和
for username in likes:
likes 是一个存储元组的列表,因此您在 like 中的用户名类似于 ("mike", 6)
.
然后您将其作为元素的位置传递给列表。这就是你收到错误的原因。我不确切地知道你想要你的代码做什么,但现在它几乎是无稽之谈
当您遍历元组列表时,每个值都是元组本身。您的代码表明它是元组的第一个元素(或索引,我不太确定 - 很明显它是明显错误的)。
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>