【发布时间】:2016-05-28 06:46:05
【问题描述】:
我试图更好地理解一些编程概念并将其付诸实践,特别是通过包含值的列表进行循环和递归(或迭代??)。我有一个从数据库中检索列表并打印表实体及其元素的 api(例如[<Assessment(name='teaching', text='something', microseries=3, subseries='3a', etc...)>, <Assessment(name='learning', text='foo', microseries=3, subseries='3b', etc...)>])。此列表中有 1-5 个微系列。
问题:删除重复的microseries,因此输出(return)只有一个microseries(例如,只有一个microseries= 3,而不是3下指定的所有微序列)名称subseries:3a、3b、3c、3d)。这里的目标是在模板中显示单个微序列(它只是一个,所以不要让这里的复数名称混淆你),以便用户可以单击它并进入扩展的微序列 (subseries) 视图 (3a , 3b, 3c ....)。
餐桌布置:
评估
|--名称
|--正文
|--微系列
|--子系列
我确信可能有更好的方法来解决这个问题,并且我很乐意听取一些建议。我是一个新手,可以使用一些明智的方向来解决这个问题。
我目前正在使用以前 Stacks 问题 1、2 建议的代码,请帮助 :) 我想更好地理解处理列表迭代和删除重复项并仅返回唯一的方法背后的概念列表中每个对象的值。请原谅我缺乏技术发言。
我正在使用 Python 2.7、SQLAlchemy 和 Pyramid(用于 Web 框架)
view.py(查看前端代码)
@view_config(route_name='assessments', request_method='GET', renderer='templates/unique_assessments.jinja2')
def view_unique_assessments(request):
# other code
all_assessments = api.retrieve_assessments()
#print 'all assessments', all_assessments
new_list = list(set(all_assessments)) #removes duplicates
new_list.sort() #sorts items in list
print 'new list', new_list # sorted and unique list
for x in new_list:
print 'test', x #prints test <Assessment(name='Foo', text='this is 1A', microseries='1', etc...)>
micro = set([x.microseries]) #doesn't work
print 'test micro single print', micro #doesn't iterate over the list and print out each unique microseries -- only prints one
#prints: test micro single print set([3]) instead of 1,2,3,4,5
return {'logged_in': logged_in_userid, 'unique_microseries': micro}
数据库表:
class Assessment(Base):
__tablename__ = 'assessments'
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True)
text = Column(String(2000))
microseries = Column(Integer)
subseries = Column(String(50))
created_on = Column(DateTime, default=datetime.utcnow)
API:
def retrieve_assessments(self):
assessments = self.session.query(Assessment).order_by(Assessment.id).all()
return assessments
【问题讨论】:
-
你能否在问题中添加模型代码,否则它有点猜测正在发生什么以及应该发生什么?
-
听起来最简单的方法是拥有一个包含
{microseries.id: microseries instance}对的字典,然后返回dict.values() -
嗨@MikkoOhtamaa。我添加了更多我认为可能对每个人都有帮助的代码。
标签: list python-2.7 duplicates iteration pyramid