我试着在我的字典里用这个:
it = iter(db)
for i in it:
print(i)
但是当我运行这个程序时,所发生的是一个无休止的循环,将字典作为一个整体打印,而不是在字典的键上打印
我用这个作为输入:
ppl = Course(123, 'Principles of Programming Languages')
os = Course(133, 'Operating Systems')
db = DB()
db.setCourse(ppl, 'SE', 2, 1)
db.setCourse(os, 'SE', 3, 1)
我的输出是:
{123: ('Principles of Programming Languages', 'SE', 2, 1), 133: ('Operating Systems', 'SE', 3, 1)}
{123: ('Principles of Programming Languages', 'SE', 2, 1), 133: ('Operating Systems', 'SE', 3, 1)}
{123: ('Principles of Programming Languages', 'SE', 2, 1), 133: ('Operating Systems', 'SE', 3, 1)}
在一个永无止境的循环中。 我很确定我的下一个计划是一团糟。你知道吗
编辑 DB代码很长,这是iter的一部分:
class DB()
DataBase = {}
def __iter__(self):
return iter(self.DataBase)
def getCourse(self,cnum):
for i in self.DataBase:
if i == cnum:
return self.DataBase[i]
def getCoursesByDept(self,dept):
for key, value in self.DataBase.items():
if dept in value:
return self.DataBase[key]
def getCoursesByDeptYear(self,dept,year):
for key, value in self.DataBase.items():
if dept in value and year in value:
return self.DataBase[key]
def getCoursesByDeptYearSem(self,dept,year,semester):
for key, value in self.DataBase.items():
if dept in value and year in value and semester in value:
return self.DataBase[key]
def setCourse(self,Course,dept,year,semester):
self.DataBase[Course.cnum] = (Course.name,dept,year,semester)
def removeCourse(self,cnum):
for i in self.DataBase.keys():
if i == cnum:
del self.DataBase[i]
正确的输出是:
Course 123: Principles of Programming Languages
Course 133: Operating Systems
看起来最简单的解决方法是:
去掉
__next__
方法。你知道吗要创建自己的密钥,您需要自己在
__iter__
中遍历密钥:它创建了一个生成器,您仍然不需要一个
__next__
;如果您需要一个__next__
,那么您需要收集密钥,然后逐个返回它们。你知道吗一旦您返回了每个键,就需要
raise StopIteration
每次再次调用__next__
意味着您只能更好地迭代一次,以坚持使用上面两个选项中的一个。你知道吗当前获得无限循环的原因是,每次调用
__next__
时,都返回整个字典,而不检查是否完成。你知道吗有关创建迭代器的详细说明,请参见this answer。你知道吗
如果您希望您的
DB
类看起来与dict
相同,那么添加keys()
、items()
和values()
;如果您不在乎或者不需要这些,那么可以使用上面的第二个选项,或者创建自己的选项。第二个选项可能类似于:这里发生的是,对于
key
,value
中的每个DB
对,在迭代时都返回。原来的循环应该是这样的:相关问题 更多 >
编程相关推荐