我正在尝试创建一个自定义迭代器类来运行用户数据的JSON文件。
class trainUsers():
def __getitem__(self, num):
with open(file.json') as f:
#if num > 43873:
# raise IndexError("end of file")
train_user = [json.loads(line) for line in f]
return train_user[num]
def rating(self,num):
return self[num]['rating']
def id(self,num):
return self[num]['user_id']
然后我可以通过
访问每个用户trainuser = data.trainUsers()
trainuser[num] #returns a dict
trainuser.rating(num)
但是,我遇到了迭代问题。
count = 0
rating = 0
for i in trainuser:
rating += trainuser.rating(i)
count += 1
print stars/ count
IndexError被注释掉,因为它总是被调用,我认为文档说for循环需要IndexError才能运行。以上从 getitem 函数中给出了以下错误。
@return train_user[num]
TypeError: list indices must be integers, not dict
我得到的是trainuser返回字典,但我无法概念化for循环使用字典迭代的原因。
如何让这个类重复并单独调用每个字典?
答案 0 :(得分:0)
这是因为你的'for'循环将json文件中的每个项目都返回为'i'而不是for循环索引。
python中'for'循环的一个例子
>>> arr = ['hip','hello','hey']
>>> for i in arr:
>>> print i
hip
hello
hey
在你的情况下,这应该有效:
>>> rating = 0
>>> for i in trainuser:
>>> rating += trainuser['rating']
>>>
>>> print stars/ len(trainuser)
或者,如果您希望通过索引保留在json文件中查找行的方法,则可以使用枚举:
>>> rating = 0
>>> for index, i in enumerate(trainuser):
>>> rating += trainuser.rating(index)
>>>
>>> print stars/ len(trainuser)